【问题标题】:sql ORA-00900: Invalid SQL statementsql ORA-00900: 无效的 SQL 语句
【发布时间】: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 语句的书籍或参考资料。

标签: sql oracle plsql


【解决方案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);

【讨论】:

    猜你喜欢
    • 2010-12-29
    • 2011-07-17
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 2011-01-21
    • 2017-05-12
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多