Obvykle neprovádíte DDL (create, alter, drop) uvnitř vaší PL/SQL procedury. Pokud potřebujete tabulku pro uložení některých dočasných dat, můžete vytvořit dočasné tabulky pro tento účel. Ve vašem případě bych nejprve vytvořil tabulky
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;
A pak by postup vypadal takto
DECLARE
CURSOR CUR IS ...
BEGIN
FOR rec IN CUR
LOOP
--Do stuff here
END LOOP;
DELETE FROM T1;
DELETE FROM T2;
END;
/
Tabulky by poté samozřejmě nebyly odstraněny, ale předpokládám, že chcete svou proceduru PL/SQL používat pravidelně, nejen jednou, že?
Pokud přesto chcete ve svém postupu provést DDL, musíte použít dynamické sql (provést okamžitě). Musíte si však být vědomi toho, že operace DDL provádějí implicitní potvrzení, takže vaše procedura nebude jedinou atomickou transakcí.