2013-06-22 166 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