0

我是 oracle 数据库的新手(一直在研究 DB2 和 cobol)。我有一个关于合并声明的问题。从 Javascript,我试图在 Oracle DB 中的表中插入一行。如果插入失败,则计划进行更新。我在 DB2 中使用了 Merge 语句,当检查时,oracle 中的 Merge SQL 类似于我在 DB2 中使用的。以下是我的合并声明。

合并到 TBL_1 O 使用(从 TBL_1 中选择 COL1、COL2、COL3,其中 COL1='A' AND COL2='B' AND COL3 = 'C')M ON(O.COL1 = M.COL1 AND O.COL2 = M。 COL2 和 O.COL3=M.COL3) 匹配时更新设置 O.COL4 = 'XYZ' ,O.COL5 = 123 不匹配时插入 ((O.COL1, O.COL2, O.COL3, O.COL4 , O.COL5) 值 ('A','B','C','XYZ',123)) ;

当我在 sql developer tool 中执行查询时,我收到一条错误消息 SQL Error: ORA-01747: invalid.user.table.column, or column specification

感谢您对此的任何帮助。谢谢

4

1 回答 1

0

我以前使用过合并语句,我唯一看到的怀疑是 INSERT 子句上的一对额外的括号。我还会从列列表中删除表别名。

列名也可能是错误的,但我无法根据给出的内容为您验证。

 MERGE INTO TBL_1 O 
    USING 
    (SELECT COL1, 
        COL2, 
        COL3 FROM TBL_1 
      WHERE COL1='A' 
        AND COL2='B' 
        AND COL3 = 'C') M 
    ON (O.COL1 = M.COL1 AND O.COL2 = M.COL2 AND O.COL3=M.COL3) 

    WHEN MATCHED THEN UPDATE 
        SET O.COL4 = 'XYZ' 
           ,O.COL5 = 123 
    WHEN NOT MATCHED THEN INSERT
    (   COL1, 
        COL2, 
        COL3, 
        COL4, 
        COL5
    ) VALUES ('A','B','C','XYZ',123) ;
于 2021-03-25T18:54:38.273 回答