Użyj dynamicznego SQL wyłączania słownika danych.
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;
Dobrym pomysłem jest precyzyjne określenie klauzuli LIKE; używając escape
słowo kluczowe, aby podkreślenia nie były traktowane jako symbole wieloznaczne. Alternatywnie użyj substr(table_name, 1, 7) = 'PREFIX_'
.
Upuszczenie niewłaściwej tabeli nie jest katastrofą, pod warunkiem, że pracujesz na 10g lub nowszym i POJEMNIK NA RECYKLING jest włączony , ale lepiej tego nie robić. Oczywiście nie uruchamiałbyś takiego kodu w środowisku produkcyjnym, ale wykorzystałbyś tę zasadę do wygenerowania skryptu instrukcji drop.
Powyższy kod nie obsługuje zależności. Jeśli masz klucze obce odwołujące się do tabel z prefiksami i chcesz wymusić usunięcie tabel, użyj tej dodatkowej logiki:
execute immediate 'drop table '|| trec.table_name ||' cascade constraint';
Powoduje to usunięcie ograniczeń kluczy obcych, ale pozostawia (wcześniej) zależne tabele.