2013-06-22 88 views
3

我试图实施一个解决方案,我找到了来自Michiel de Mare的here,用一个(最好是简单的语法意义上的)查询来更新多个记录。我试图学习的示例代码如下所示:Oracle:在重复密钥更新

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 

我处理具有运行查询的函数调用的内容管理系统;在这个框架内。我不认为这是恰当的,但我从来没有必要把';'但是,在查询结束时,我尝试了使用和不使用分号。

+0

哪个查询生成错误消息? –

+0

@Andrew,我编辑了这个问题。 – John

+0

好的,但A1ex07已回答你的问题。 –

回答

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 
+0

oracle有ON DUPLICATE KEY UPDATE,请参阅https://docs.oracle.com/cd/E17952_01/refman-5.1- en/insert-select.html –

+6

@mauek unak:Oracle数据库没有'ON DUPLICATE KEY UPDATE'。问题是关于Oracle数据库,而不是Oracle公司拥有的Mysql。您提供的文档是关于Mysql 5.1的。 :) – a1ex07