Dans Oracle, j'utilise une instruction MERGE comme:Can MERGE mise à jour sur les deux tables?
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)
;
La table de mise en scène contient également une « fusion » drapeau, que je veux mettre à jour « Y » après la fusion.
Je pensais que je pouvais combiner cela avec une mise à jour supplémentaire (après la fusion) comme:
update staging_table
set merged = 'Y'
where id in (select id
from live_table)
;
mais met également à jour le drapeau sur les dossiers qui ont déjà été fusionnées dans les transactions précédentes. Une solution de contournement consiste à écrire cela sous la forme d'une boucle qui gère l'insertion/mises à jour une par une, mais cela annulerait la facilité de l'instruction MERGE.
Comment puis-je mettre à jour l'indicateur fusionné de telle sorte que je suis sûr que seules les lignes affectées par l'instruction de fusion sont mises à jour?
Déjà pensé. Merci de confirmer! –