Zwykle nie wykonujesz DDL (tworzenie, zmienianie, usuwanie) wewnątrz procedury PL/SQL. Jeśli potrzebujesz tabeli do przechowywania danych tymczasowych, możesz utworzyć tabele tymczasowe w tym celu. W twoim przypadku najpierw utworzyłbym tabele
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 wtedy procedura wyglądałaby tak
DECLARE
CURSOR CUR IS ...
BEGIN
FOR rec IN CUR
LOOP
--Do stuff here
END LOOP;
DELETE FROM T1;
DELETE FROM T2;
END;
/
Oczywiście tabele nie zostałyby po tym usunięte, ale przypuszczam, że chcesz używać procedury PL/SQL regularnie, a nie tylko raz, prawda?
Jeśli nadal chcesz wykonać DDL w swojej procedurze, musisz użyć dynamiczny sql (wykonaj natychmiast). Musisz jednak pamiętać, że operacje DDL wykonują niejawne zatwierdzenia, więc Twoja procedura nie będzie pojedynczą transakcją atomową.