Lorsque je fais un MERGE dans Oracle SQL, comment puis-je mettre à jour les lignes qui ne correspondent pas à la SOURCE?

J'ai un main base de données et un report base de données, et j'ai besoin de synchroniser un tableau de main en report.

Toutefois, lorsqu'un élément est supprimé dans le main base de données, je ne veux définir une IsDeleted drapeau dans le report base de données.

Ce qui est une manière élégante de faire cela?

Je suis actuellement en utilisant une instruction MERGE, comme ceci:

MERGE INTO report.TEST target
USING (SELECT * FROM main.TEST) source
   ON (target.ID = source.ID)
WHEN MATCHED THEN
    UPDATE SET (target... = source...)
WHEN NOT MATCHED THEN
    INSERT (...) VALUES (source...)
;

La WHEN NOT MATCHED déclaration me donne toutes les NOUVELLES valeurs de la mainmais je veux aussi mettre à jour toutes les ANCIENNES valeurs de report.

Je suis en utilisant Oracle PL/SQL.

source d'informationauteur Scott Rippey