Usa l'SQL dinamico per uscire dal dizionario dei dati.
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;
È una buona idea essere precisi con la clausola LIKE; usando il escape
parola chiave per garantire che i caratteri di sottolineatura non vengano trattati come caratteri jolly. In alternativa usa substr(table_name, 1, 7) = 'PREFIX_'
.
Eliminare la tabella sbagliata non è un disastro a condizione che tu stia lavorando su 10g o versioni successive e il Cestino è abilitato , ma è comunque meglio di no. Ovviamente non eseguiresti codice come questo in Produzione, ma utilizzeresti il principio per generare uno script di istruzioni drop.
Il codice sopra non gestisce le dipendenze. Se hai chiavi esterne che fanno riferimento alle tabelle con prefisso e vuoi forzare l'eliminazione delle tabelle usa questa logica aggiuntiva:
execute immediate 'drop table '|| trec.table_name ||' cascade constraint';
Ciò elimina i vincoli di chiave esterna ma lascia le tabelle (precedentemente) dipendenti.