2013-06-23 51 views
1

我孤立我的问题到这个代码,这是给我的错误消息“ORA-00933:SQL命令不能正确地结束”为上的重复键行。SQL命令无法正常结束,在插入/上重复

我想,除非他们有一个重复键,在这种情况下,我想,而不是更新它们插入行。类似insert...selecton duplicate key update

我可以看到它必须是一个语法问题,但我通常不使用SQL工作,所以任何帮助表示赞赏。

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

回答

2

我会考虑使用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); 

注:这是假定这两个表之间的关键是col1和COLX。

+0

MERGE与INSERT ... SELECT有什么不同?即在做出改变之前有什么我应该注意的吗? – stringy

+0

编辑添加:因为我做了更改,它的工作:) – stringy

+0

@stringy - 它大不相同,因为Oracle没有'on key key'语法。 –