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 语句

ORA-00900: 无效的 SQL 语句 - 使用 node-oracledb 运行查询时

将 @Transactionnal 从存储库移动到服务后获取 ORA-00900(无效 SQL 语句)