Je dois insérer/mettre à jour des RECORDS dans la table target_table. Ces enregistrements proviennent d'une source_table.
J'utilise MERGE pour mettre à jour/insérer dans target_table. La requête est comme ci-dessous
MERGE
INTO target_table tgt
USING source_table src
ON ( src.column1 = tgt.column1 and
src.column2 = tgt.column2)
WHEN MATCHED
THEN
UPDATE
SET tgt.column3= src.column3,
tgt.column4 = src.coulmn4
WHEN NOT MATCHED
THEN
INSERT ( tgt.column1,
tgt.column2,
tgt.column3,
tgt.column4 )
VALUES ( src.coulmn1,
src.coulmn2,
src.coulmn3,
src.coulmn4);
Je veux ajouter une condition spécifique sur la mise à jour.
IF target_table.column3 in (val1','val2)
alors seulement il devrait y avoir une mise à jour, sinon aucune mise à jour ou insertion.
Vous pouvez simplement ajouter la clause WHERE
à UPDATE
. Plus à ce sujet dans les documents Oracle.
Donc, dans votre cas, cela devrait ressembler à:
...
WHEN MATCHED
THEN
UPDATE
SET tgt.column3= src.column3,
tgt.column4 = src.coulmn4
WHERE tgt.column3 IN (val1, val2)
WHEN NOT MATCHED
...
vous pouvez utiliser cet article pour répondre à votre question de pinal Dava
Essayez plutôt de faire comme ci-dessous:
MERGE
INTO target_table tgt
USING source_table src
ON (src.column1 = tgt.column1)
WHEN MATCHED
THEN
UPDATE
SET tgt.column3= src.column3,
tgt.column4 = src.coulmn4
WHERE src.column1 = tgt.column1 and
src.column2 = tgt.column2
WHEN NOT MATCHED
THEN
INSERT ( tgt.column1,
tgt.column2,
tgt.column3,
tgt.column4 )
VALUES ( src.coulmn1,
src.coulmn2,
src.coulmn3,
src.coulmn4);