Normalmente você não executa DDLs (criar, alterar, descartar) dentro de seu procedimento PL/SQL. Se você precisar de uma tabela para armazenar alguns dados temporários, poderá criar tabelas temporárias para este fim. No seu caso eu primeiro criaria as tabelas
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;
E então o procedimento ficaria assim
DECLARE
CURSOR CUR IS ...
BEGIN
FOR rec IN CUR
LOOP
--Do stuff here
END LOOP;
DELETE FROM T1;
DELETE FROM T2;
END;
/
Claro que as tabelas não seriam descartadas depois disso, mas suponho que você queira usar seu procedimento PL/SQL regularmente, não apenas uma vez, certo?
Se você ainda deseja executar DDL em seu procedimento, deve usar sql dinâmico (executar imediatamente). No entanto, você deve estar ciente de que as operações DDL executam confirmações implícitas, portanto, seu procedimento não seria uma única transação atômica.