在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语句影响的行才会更新?
答案 0 :(得分:3)
在这个例子中,我将使用PL / SQL块,并使用批量收集+批量绑定来执行所需的查询和更新/插入。