SQL命令未正确结束,在插入/更新时。

4 浏览
0 Comments

SQL命令未正确结束,在插入/更新时。

我已经将我的问题缩小到这段代码,这段代码给我返回了错误信息"ORA-00933:SQL命令结束不正确",出错的是on duplicate key行。

我试图插入行,除非它们有重复的键,如果有重复的键,我想要更新它们。类似于insert...select和on duplicate key update。

我可以看到这一定是语法问题,但我平时不使用SQL,所以任何帮助都会很感激。

insert into "tableB" ("col1", "col2")
select      "tableA"."colX", "tableA"."colY"
from        "tableA"
on duplicate key update "tableB"."col1" = "tableA"."colX";

0
0 Comments

问题的出现的原因是因为Oracle数据库不支持"on duplicate key"语法。解决方法是使用MERGE语句来代替INSERT语句。

MERGE语句的语法如下:

MERGE INTO tableB b
USING tableA a
    ON (b.col1 = a.colX)
WHEN MATCHED THEN 
    UPDATE SET b.col2 = a.colY
WHEN NOT MATCHED THEN 
    INSERT (col1, col2)
    VALUES (a.colX, a.colY);

这个语句的作用是将tableA中的数据插入到tableB中,如果在tableB中已经存在相同的col1和colX的数据,则更新tableB中对应的数据的col2为tableA中对应的colY的值。

需要注意的是,MERGE语句需要指定用于匹配两个表的列,这里假设是col1和colX。在使用MERGE语句之前,需要确保这两个列在两个表中是有对应关系的。

通过使用MERGE语句,可以避免"SQL command not properly ended, on an insert/on duplicate"这个错误。

0