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

Oracle PL/SQL Oprettelse af tabeller i markøren?

Normalt udfører du ikke DDL'er (create, alter, drop) i din PL/SQL-procedure. Hvis du har brug for en tabel til at gemme nogle midlertidige data, kan du oprette midlertidige tabeller til dette formål. I dit tilfælde ville jeg først oprette tabellerne

CREATE GLOBAL TEMPORARY TABLE T1
  (
    col1 VARCHAR2(128),
    col2  VARCHAR2(128),
    col3 NUMBER(3) NOT NULL,
    col3 FLOAT(100)
  );

CREATE GLOBAL TEMPORARY TABLE T2 AS
SELECT * FROM other_table WHERE 1 = 0;

Og så ville proceduren se sådan ud

DECLARE
CURSOR CUR IS ...
BEGIN
       FOR rec IN CUR
       LOOP
       --Do stuff here
         END LOOP;

DELETE FROM T1;
DELETE FROM T2;
END;
/

Selvfølgelig ville tabellerne ikke blive droppet efter det, men jeg formoder, at du vil bruge din PL/SQL-procedure regelmæssigt, ikke kun én gang, vel?

Hvis du stadig ønsker at udføre DDL i din procedure, skal du bruge dynamisk sql (udføres straks). Du skal dog være opmærksom på, at DDL-operationer udfører implicitte commits, så din procedure ville ikke være en enkelt atomtransaktion.




  1. Beregn tidsforskel i minutter i SQL Server

  2. hent post i rækkefølge med IN-klausul - med duplikerede værdier i IN-klausul

  3. Udfør indbyrdes afhængige visninger fra mysqldump backup

  4. Sådan finder og erstatter du tekst i MySQL-database ved hjælp af SQL