web-dev-qa-db-fra.com

Voulez-vous ajouter certaines conditions dans l'instruction MERGE dans Oracle SQL pour l'insertion/mise à jour

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.

13
Bit_hunter

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
...
23
psur

vous pouvez utiliser cet article pour répondre à votre question de pinal Dava

Déclaration MERGE

2
A.Goutam

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);
0