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

Konvertieren Sie Select Oracle Query To Updte für ein bestimmtes Szenario

Eine gute Möglichkeit, eine Tabelle aus einer Abfrage zu aktualisieren, ist die Verwendung einer MERGE-Anweisung. Hier ist ein Beispiel, das all_objects kopiert und eine Spalte mit der Anzahl der Objekte hinzufügt, die mit Eigentümer und Typ dieser Zeile übereinstimmen.

CREATE TABLE all_objects_2 AS
SELECT *
  FROM all_objects;

ALTER TABLE all_objects_2 add owner_and_type_ct NUMBER;

MERGE INTO all_objects_2 ao2
USING (SELECT ao.owner,
              ao.object_type,
              COUNT(*) AS ct
         FROM all_objects ao
        GROUP BY ao.owner,
                 ao.object_type) x
ON (ao2.owner = x.owner AND ao2.object_type = x.object_type)
WHEN MATCHED THEN
  UPDATE
     SET ao2.owner_and_type_ct = x.ct;

SELECT ao2.owner,
       ao2.object_name,
       ao2.object_type,
       ao2.owner_and_type_ct
  FROM all_objects_2 ao2
 WHERE rownum < 10;
/*
SYS C_TS# CLUSTER 10
SYS I_TS# INDEX 1459
SYS C_FILE#_BLOCK#  CLUSTER 10
SYS I_FILE#_BLOCK#  INDEX 1459
SYS FET$  TABLE 1592
SYS UET$  TABLE 1592
SYS SEG$  TABLE 1592
SYS UNDO$ TABLE 1592
SYS TS$ TABLE 1592
*/

Sie MERGE IN [destination table] USING [your query] ON [criteria to join query to destination] und WENN Sie eine Zeile ZUSAMMENPASSEN, AKTUALISIEREN Sie die Zeile mit den Werten aus der Abfrage. Sie können auch INSERT und DELETE mit einem MERGE verwenden, aber ich werde nicht alle Dokumentation .