sql ORA-00900: 无效的 SQL 语句
Posted
技术标签:
【中文标题】sql ORA-00900: 无效的 SQL 语句【英文标题】:sql ORA-00900: Invalid SQL statement 【发布时间】:2017-04-06 10:22:50 【问题描述】:请帮忙
IF EXISTS(SELECT * FROM MERC_ADM_VERSION )then UPDATE MERC_ADM_VERSION SET
VER_VALEUR = 20150409 WHERE VER_CLE = 'MEAD' ELSE INSERT INTO MERC_ADM_VERSION
('VER_VALEUR', 'VER_CLE') VALUES (20150409, 'MEAD');
ORA-00900:无效的 SQL 语句
【问题讨论】:
IF
不是 Oracle SQL 的一部分;它是 PL/SQL 语法的一部分。也许您正在寻找MERGE
声明?
您在哪里学习了 Oracle SQL?查找有关 Oracle SQL 语句的书籍或参考资料。
在这里试试:livesql.oracle.com/apex/livesql/file/index.html
【参考方案1】:
从插入语句中的列中删除单引号。
代替
('VER_VALEUR', 'VER_CLE')
应该是
(VER_VALEUR, VER_CLE)
【讨论】:
这是在存储过程还是函数中? IF 是 PL-SQL 的一部分,你不能把它写成普通查询。 这是个问题,但不会导致 ORA-00900 错误。【参考方案2】:您的问题很不清楚您要做什么。但是,我最好的解释是您正在寻找一个 oracle 合并语句。以下是基于我对您提供的少量信息所做的假设的示例。您很可能正在寻找 MERGE 语句。这允许您执行单个操作,该操作可以根据您的条件进行更新或插入。
此外,您似乎在使用日期,但采用数字格式。由于缺少任何表定义,我没有采取任何措施来解决这个问题。你可能仍然有问题。
MERGE
INTO merc_adm_version TARGET -- The table you want to update/insert into
USING (SELECT 20150409 as ver_valeur, 'MEAD' as ver_cle FROM dual) SOURCE -- The source of the data
ON (TARGET.ver_cle = SOURCE.ver_cle) -- How to try and match records between source and target
WHEN MATCHED THEN UPDATE SET ver_valeur = 20150409 -- When there is a match, how to update
WHEN NOT MATCHED THEN INSERT (ver_cle, ver_valeur) -- When there is not a match, how to insert
VALUES ('MEAD', 20150409);
【讨论】:
以上是关于sql ORA-00900: 无效的 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章
如何找出 datagrip 中的 ORA-00900 无效 SQL 语句
使用简单循环插入时出现“ORA-00900 无效 SQL 语句”
SQLSyntaxErrorException: ORA-00900: 使用 Java 的无效 SQL 语句
Oracle.DataAccess.Client.OracleException: ORA-00900: 无效的 SQL 语句