Brug dynamisk SQL, der fjerner dataordbogen.
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 er en god idé at være præcis med LIKE-klausulen; ved hjælp af escape
søgeord for at sikre, at understregninger ikke behandles som jokertegn. Brug alternativt substr(table_name, 1, 7) = 'PREFIX_'
.
At slippe den forkerte tabel er ikke en katastrofe, forudsat at du arbejder på 10g eller nyere og genbrugsbakken er aktiveret , men det er stadig bedre at lade være. Selvfølgelig ville du ikke køre kode som denne i produktion, men du ville bruge princippet til at generere et script med drop-sætninger.
Ovenstående kode håndterer ikke afhængigheder. Hvis du har fremmednøgler, der refererer til de præfikserede tabeller, og du ønsker at tvinge tab af tabellerne, skal du bruge denne yderligere logik:
execute immediate 'drop table '|| trec.table_name ||' cascade constraint';
Dette fjerner begrænsningerne for fremmednøgle, men forlader de (tidligere) afhængige tabeller.