Vanligtvis utför du inte DDL (skapa, ändra, släpp) i din PL/SQL-procedur. Om du behöver en tabell för att lagra vissa tillfälliga data kan du skapa tillfälliga tabeller för det här syftet. I ditt fall skulle jag först skapa tabellerna
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;
Och då skulle proceduren se ut så här
DECLARE
CURSOR CUR IS ...
BEGIN
FOR rec IN CUR
LOOP
--Do stuff here
END LOOP;
DELETE FROM T1;
DELETE FROM T2;
END;
/
Naturligtvis skulle tabellerna inte släppas efter det, men jag antar att du vill använda din PL/SQL-procedur regelbundet, inte bara en gång, eller hur?
Om du fortfarande vill utföra DDL i din procedur måste du använda dynamisk sql (utför omedelbart). Du måste dock vara medveten om att DDL-operationer utför implicita commits, så din procedur skulle inte vara en enda atomär transaktion.