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.