Обикновено не изпълнявате DDL (създаване, промяна, премахване) във вашата PL/SQL процедура. Ако имате нужда от таблица за съхраняване на някои временни данни, можете да създадете временни таблици за тази цел. Във вашия случай първо бих създал таблиците
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;
И тогава процедурата ще изглежда така
DECLARE
CURSOR CUR IS ...
BEGIN
FOR rec IN CUR
LOOP
--Do stuff here
END LOOP;
DELETE FROM T1;
DELETE FROM T2;
END;
/
Разбира се, таблиците няма да бъдат премахнати след това, но предполагам, че искате да използвате вашата PL/SQL процедура редовно, не само веднъж, нали?
Ако все пак искате да изпълнявате DDL във вашата процедура, тогава трябва да използвате динамичен sql (незабавно изпълнение). Въпреки това трябва да сте наясно, че DDL операциите изпълняват имплицитни ангажименти, така че вашата процедура няма да бъде единична атомна транзакция.