SQL命令未正确结束,在插入/更新时。
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";
问题的出现的原因是因为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"这个错误。