Это не красиво, но вы можете сделать это с MERGE INTO , используя UNION SELECT ... FRU DUAL в качестве источника слияния.
Дано:
create table writer (
id integer primary key,
name varchar2(255) not null
)
Вы можете сделать:
merge into writer dst
using (
select 1 as id, 'Edward Luttwak' as name from dual
union
select 2 as id, 'Iain Sinclair' as name from dual
) src
on (dst.id = src.id)
when matched then update set dst.name = src.name
when not matched then insert (dst.id, dst.name) values (src.id, src.name);
Для каждой строки, которую вы хотите обновить, добавьте термин в объединение в подзапросе. Если вы знаете, что строки определенно являются обновлениями и никогда не вставляются, вы можете удалить целое предложение when matched
.