Oracle:ON DUPLICATE KEY UPDATE

时间:2013-06-22 18:30:06

标签: sql oracle upsert

我正在尝试实现我在Michiel de Mare here找到的解决方案,用一个(最好是简单的语法感知)查询来更新多个记录。我想要学习的示例代码如下所示:

INSERT INTO table (id,Col1,Col2) VALUES (1,1,1),(2,2,3),(3,9,3),(4,10,12) ON DUPLICATE KEY UPDATE Col1=VALUES(Col1),Col2=VALUES(Col2);

我正在使用Oracle(我还不熟悉SQL查询)。

基于一些动态内容,我已经连接了类似于上面的查询。它的长度可能会有所不同,具体取决于我要更新的记录数,但这是我生成的查询示例:

INSERT INTO my_table (question_id,ug) VALUES (30,0),(31,1) ON DUPLICATE KEY UPDATE ug=VALUES(ug) 

以上查询收到此错误:

Native message: ORA-00933: SQL command not properly ended

我正在处理一个内容管理系统,它有一个运行查询的函数调用;在这个框架内。我不认为这是相关的,但我从来不需要把';'但是,在查询结束时,我尝试使用和不使用分号。

1 个答案:

答案 0 :(得分:12)

Oracle没有on duplicate key update使用MERGE代替:

MERGE INTO my_table trg  
USING (SELECT 30 as question_id,0 as ug FROM DUAL
UNION ALL 
SELECT 31,1 FROM DUAL) src ON (src.question_id = trg.question_id)
WHEN NOT MATCHED THEN INSERT(question_id, ug) VALUES
(src.question_id, src.ug)
WHEN MATCHED THEN UPDATE
SET trg.ug = src.ug