Oracle
 sql >> Database >  >> RDS >> Oracle

Converti Selezionare Oracle Query per aggiornare per uno scenario specifico

Un ottimo modo per aggiornare una tabella da una query consiste nell'utilizzare un'istruzione MERGE. Ecco un esempio che copia all_objects e aggiunge una colonna del numero di oggetti che corrispondono a quel proprietario e tipo di righe.

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
*/

Ti unisci a [tabella di destinazione] USANDO [la tua query] su [criteri per unire la query alla destinazione] e QUANDO ABBINA una riga AGGIORNA la riga con i valori della query. Puoi anche INSERT ed DELETE con un MERGE, ma non ho intenzione di duplicare tutti i documentazione .