Použijte dynamické SQL řízení mimo datový slovník.
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;
Je dobré být přesný s klauzulí LIKE; pomocí escape
klíčové slovo, abyste zajistili, že podtržítka nebudou považována za zástupné znaky. Případně použijte substr(table_name, 1, 7) = 'PREFIX_'
.
Zahození špatné tabulky není katastrofou za předpokladu, že pracujete na 10g nebo novějším a RECYCLE BIN je aktivován , ale stejně je lepší ne. Je zřejmé, že byste takto nespouštěli kód v Production, ale použili byste tento princip ke generování skriptu příkazů drop.
Výše uvedený kód nezpracovává závislosti. Pokud máte cizí klíče odkazující na tabulky s předponou a chcete vynutit odstranění tabulek, použijte tuto další logiku:
execute immediate 'drop table '|| trec.table_name ||' cascade constraint';
Tím se zruší omezení cizího klíče, ale zůstanou (dříve) závislé tabulky.