4

ここで Michiel de Mare から見つけたソリューションを実装して、複数のレコードを 1 つの (できれば構文的に単純な) クエリで更新しようとしています。私が学ぼうとしているサンプルコードは次のようになります。

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

クエリを実行する関数呼び出しを持つコンテンツ管理システムを扱っています。この枠組みの中で。関係ないと思いますが、「;」を入れる必要はありませんでした。ただし、クエリの最後に、セミコロンの有無にかかわらず試してみました。

4

1 に答える 1

13

Oracle には代わりにon duplicate key updateUse がありません。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
于 2013-06-22T18:34:55.963 に答える