Я пытаюсь выполнить UPSERT в DB2 9.7 без создания временной таблицы для слияния. Я указываю значения в качестве параметров, однако всегда получаю синтаксическую ошибку для запятой, разделяющей значения, когда я пытаюсь включить более одной строки значений.
MERGE INTO table_name AS tab
USING (VALUES
(?,?),
(?,?)
) AS merge (COL1, COL2)
ON tab.COL1 = merge.COL1
WHEN MATCHED THEN
UPDATE SET tab.COL1 = merge.COL1,
tab.COL2 = merge.COL2
WHEN NOT MATCHED THEN
INSERT (COL1, COL2)
VALUES (merge.COL1, merge.COL2)
Я также попробовал ответ teknopaul из Есть ли в DB2 "вставка или обновление" оператор, но получил другую синтаксическую ошибку, жалующуюся на использование SELECT.
Кто-нибудь знает, как правильно включить таблицу со значениями в мое слияние, фактически не создавая/удаляя ее в базе данных?
AS merge (COL1, COL2)
. - person mustaccio   schedule 19.07.2016ERROR [42601] [IBM][CLI Driver][DB2] SQL0104N An unexpected token "," was found following "". Expected tokens may include: "FOR )". SQLSTATE=42601
- person Crobota   schedule 19.07.2016TABLE
:USING TABLE (VALUES ... ) AS m (COL1, COL2)
- person mustaccio   schedule 19.07.2016ERROR [42601] [IBM][CLI Driver][DB2] SQL0199N The use of the reserved word "TABLE" following "" is not valid. Expected tokens may include: "(". SQLSTATE=42601
Исходный код выше работает на другом сервере. Разница в том, что это не на мейнфрейме... - person Crobota   schedule 19.07.2016MERGE
. Возможно, вам нужно выяснить, с какой версией на какой платформе вы имеете дело, прежде чем тратить больше времени. Вы указали 9.7 (при условии LUW) в вопросе, а затем в комментариях сказали, что это 8.2.1 на мейнфрейме. - person mustaccio   schedule 19.07.2016