Sie können dies versuchen
1 MERGE
2 INTO target_table tgt
3 USING source_table src
4 ON ( src.object_id = tgt.object_id )
5 WHEN MATCHED
6 THEN
7 UPDATE
8 SET tgt.object_name = src.object_name
9 , tgt.object_type = src.object_type
10 WHEN NOT MATCHED
11 THEN
12 INSERT ( tgt.object_id
13 , tgt.object_name
14 , tgt.object_type )
15 VALUES ( src.object_id
16 , src.object_name
17 , src.object_type );
Die Syntax sieht zunächst etwas abschreckend aus, aber wenn wir sie von oben nach unten durchlesen, ist sie recht intuitiv. Beachten Sie die folgenden Klauseln:
•MERGE (Zeile 1):Wie bereits erwähnt, ist dies jetzt die 4. DML-Anweisung in Oracle. Alle Hinweise, die wir vielleicht hinzufügen möchten, folgen direkt diesem Schlüsselwort (z. B. MERGE /*+ HINT */);
•INTO (Zeile 2):So geben wir das Ziel für das MERGE an. Das Ziel muss entweder eine Tabelle oder eine aktualisierbare Ansicht sein (eine Inline-Ansicht kann hier nicht verwendet werden);
•USING (Zeile 3):Die USING-Klausel repräsentiert den Quelldatensatz für das MERGE. Dies kann eine einzelne Tabelle (wie in unserem Beispiel) oder eine Inline-Ansicht sein;
•ON () (Zeile 4):In der ON-Klausel liefern wir den Join zwischen dem Quelldatensatz und der Zieltabelle. Beachten Sie, dass die Join-Bedingungen in Klammern stehen müssen;
•WHEN MATCHED (Zeile 5):In dieser Klausel weisen wir Oracle an, was zu tun ist, wenn wir bereits einen übereinstimmenden Datensatz in der Zieltabelle haben (d. h. es gibt einen Join zwischen den Quell- und Zieldatensätzen). Wir wollen in diesem Fall natürlich ein UPDATE. Eine der Einschränkungen dieser Klausel besteht darin, dass wir keine der in der ON-Klausel verwendeten Spalten aktualisieren können (obwohl wir das natürlich nicht müssen, da sie bereits übereinstimmen). Jeder Versuch, eine Join-Spalte einzuschließen, löst eine unbeabsichtigte Ausnahme wegen ungültiger Kennung aus; und
•WHEN NOT MATCHED (Zeile 10):In dieser Klausel fügen wir Datensätze ein, für die es aktuell keine Übereinstimmung gibt.