Använd dynamisk SQL som driver bort dataordboken.
begin
for trec in ( select table_name
from user_tables
where table_name like 'PREFIX\_%' escape `\' )
loop
dbms_output.put_line('dropping table ' || trec.table_name);
execute immediate 'drop table '||trec.table_name;
end loop;
end;
Det är en bra idé att vara exakt med LIKE-satsen; med escape
nyckelord för att säkerställa att understreck inte behandlas som jokertecken. Använd alternativt substr(table_name, 1, 7) = 'PREFIX_'
.
Att släppa fel tabell är inte en katastrof förutsatt att du arbetar med 10g eller senare och återvinningsfacket är aktiverat , men det är ändå bättre att låta bli. Uppenbarligen skulle du inte köra sådan kod i produktion, men du skulle använda principen för att generera ett skript med drop-satser.
Ovanstående kod hanterar inte beroenden. Om du har främmande nycklar som refererar till de prefixerade tabellerna och du vill tvinga bort tabellerna, använd denna ytterligare logik:
execute immediate 'drop table '|| trec.table_name ||' cascade constraint';
Detta tar bort begränsningarna för främmande nyckel men lämnar de (tidigare) beroende tabellerna.