Я нашел эту ветку, потому что мне действительно нужна была одна строка для DB2 INSERT ИЛИ ОБНОВЛЕНИЯ.
Кажется, что работает следующий синтаксис, не требуя отдельной временной таблицы.
Работает, используя VALUES () для создания структуры таблицы. SELECT * кажется избыточным ИМХО, но без него я получаю синтаксические ошибки.
MERGE INTO mytable AS mt USING (
SELECT * FROM TABLE (
VALUES
(123, 'text')
)
) AS vt(id, val) ON (mt.id = vt.id)
WHEN MATCHED THEN
UPDATE SET val = vt.val
WHEN NOT MATCHED THEN
INSERT (id, val) VALUES (vt.id, vt.val)
;
если вам нужно вставить более одной строки, часть VALUES может быть повторена без дублирования остальных.
VALUES
(123, 'text'),
(456, 'more')
Результатом является один оператор, который может ВСТАВИТЬ ИЛИ ОБНОВИТЬ одну или несколько строк, предположительно, в качестве атомарной операции.