Oracle
 sql >> Database >  >> RDS >> Oracle

Come eliminare l'elenco di tabelle da uno schema in Oracle?

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.