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

Konverter Vælg Oracle-forespørgsel til opdatering til specifikke scenarier

En god måde at opdatere en tabel fra en forespørgsel på er at bruge en MERGE-sætning. Her er et eksempel, der kopierer alle_objekter og tilføjer en kolonne med antallet af objekter, der matcher den pågældende rækkes ejer og type.

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

Du FLUTTER TIL [destinationstabel] VED HJÆLP AF [din forespørgsel] PÅ [kriterier for at forbinde forespørgsel til destination], og NÅR du MATCHER en række OPDATERER du rækken med værdierne fra forespørgslen. Du kan også INSERT og DELETE med en FLOTNING, men jeg har ikke tænkt mig at duplikere alle dokumentation .




  1. Hvordan beskytter denne PDO-kode mod SQL-injektioner?

  2. Hvordan bruger jeg CREATE OR REPLACE?

  3. Mysql DISTINCT virker ikke, hvis jeg tilføjer en anden kolonne

  4. Rake-opgave for at afkorte alle borde i Rails 3