Наистина не трябва да правите това в PL/SQL, таблици, създадени по време на изпълнение, биха били показателни за недостатък във вашия модел на данни. Ако наистина сте убедени, че абсолютно трябва да направите това, тогава проучете временни таблици първи. Лично аз бих преценил дали изобщо е необходимо.
Изглежда предпочитате EAFP за разлика от LBYL подход, който е описан в няколко отговора на този въпрос . Бих казал, че това е ненужно. Таблицата е доста статичен звяр, можете да използвате системния изглед USER_TABLES за да определите дали съществува, преди да го пуснете.
declare
l_ct number;
begin
-- Determine if the table exists.
select count(*) into l_ct
from user_tables
where table_name = 'THE_TABLE';
-- Drop the table if it exists.
if l_ct = 1 then
execute immediate 'drop table the_table';
end if;
-- Create the new table it either didn-t exist or
-- has been dropped so any exceptions are exceptional.
execute immediate 'create table the_table ( ... )';
end;
/