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
Я имею дело с системой управления контентом, у которой есть вызов функции, которая выполняет запросы; в этих рамках. Я не думаю, что это уместно, но мне никогда не нужно было ставить ';' однако в конце запросов я пробовал с точкой с запятой и без нее.
1 ответ
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