Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Die Aktualisierung der Oracle SQL Update-Abfrage dauert Tage

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.