2013-01-25 3 views
12

Ich muss einige RECORDS in der Tabelle target_table einfügen/aktualisieren. Diese Datensätze kommen einer source_table.Möchten Sie einige Bedingungen in MERGE-Anweisung in Oracle SQL für einfügen/aktualisieren hinzufügen

Ich verwende MERGE für update/in target_table einfügen. Abfrage ist wie folgt

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

Ich möchte einige spezifische Bedingung für die Aktualisierung hinzufügen.

IF target_table.column3 in (val1','val2)

dann nur sollte es Update sein, sonst kein Update oder einfügen.

Antwort

17

Sie können die WHERE-Klausel einfach zu UPDATE hinzufügen. More about it in oracle docs.

Also in Ihrem Fall soll wie folgt aussehen:

... 
WHEN MATCHED 
THEN 
    UPDATE 
    SET tgt.column3= src.column3, 
     tgt.column4 = src.coulmn4 
    WHERE tgt.column3 IN (val1, val2) 
WHEN NOT MATCHED 
... 
+0

Danke für Ihre Antwort verwenden kann. Ich werde deinen Code ausprobieren. –

+0

@ user1965381 Ist es in Ordnung? – psur

+0

Hallo Psur, ich habe ein ähnliches Problem, aber ich habe 2 Bedingungen in der Bedingung in Update-Klausel. Aber nur einer von ihnen funktioniert. Wenn ich beide Bedingungen verwende, werden 0 Datensätze aktualisiert, ansonsten werden ~ 700K oder ~ 80K Datensätze aktualisiert. Mit beiden Bedingungen erwarte ich, dass nur ~ 60 Datensätze aktualisiert werden. Irgendwelche Hinweise wären eine große Hilfe. Vielen Dank! – KLeonine

2

Sie diesen Artikel für Ihre Frage nach pinal Dava

MERGE statement

+0

Das Thema der Frage ist Oracle PL/SQL, nicht SQL Server. –

+0

Aber +1 seit Frage wurde nicht als solche markiert. – pnuts