Может ли MERGE обновить обе таблицы? - PullRequest
1 голос
/ 24 ноября 2010

В Oracle я использую оператор MERGE, например:

merge into live_table l
using (
  select *
  from staging_table
  where merged = 'N'
  ) s
on (i.id = s.id)
when matched then
  update l.description = s.description
when not matched then
  insert (l.id, l.description)
  values (s.id, s.description)
;

Промежуточная таблица также содержит флаг «слияния», который я хочу обновить до «Y» после слияния.

Я думал, что смогу совместить это с дополнительным обновлением (после слияния), например:

update staging_table
set merged = 'Y'
where id in (select id
  from live_table)
;

но при этом также обновляется флаг для записей, которые уже были объединены в предыдущих транзакциях. Обходной путь должен написать это как цикл, который обрабатывает вставку / обновление один за другим, но это нарушило бы простоту оператора MERGE.

Как я могу обновить флаг слияния таким образом, чтобы я был уверен, что обновляются только те строки, на которые влияет оператор слияния?

1 Ответ

3 голосов
/ 24 ноября 2010

В этом случае я бы использовал блок PL / SQL и использовал массовый сбор + массовое связывание для выполнения необходимых запросов и обновлений / вставок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...