MERGE可以更新两个表吗?

时间:2010-11-24 08:58:20

标签: oracle merge

在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语句的简易性。

如何以这样的方式更新合并标志:我确定只有那些受merge语句影响的行才会更新?

1 个答案:

答案 0 :(得分:3)

在这个例子中,我将使用PL / SQL块,并使用批量收集+批量绑定来执行所需的查询和更新/插入。