Vous ne devriez vraiment pas faire cela en PL/SQL, les tables créées au moment de l'exécution indiqueraient une faille dans votre modèle de données. Si vous êtes vraiment convaincu que vous devez absolument le faire, alors enquêtez sur tableaux temporaires première. Personnellement, je réévaluerais si c'est vraiment nécessaire.
Vous semblez opter pour le EAFP par opposition à LBYL approche, qui est décrite dans quelques réponses à cette question . Je dirais que ce n'est pas nécessaire. Une table est une bête assez statique, vous pouvez utiliser la vue système USER_TABLES pour déterminer s'il existe avant de le supprimer.
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;
/