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
Другие вопросы по тегам