Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie lösche ich eine Tabellenliste aus einem Schema in Oracle?

Verwenden Sie dynamisches SQL, das aus dem Datenwörterbuch herausfährt.

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;

Es ist eine gute Idee, mit der LIKE-Klausel genau zu sein; mit dem escape Schlüsselwort, um sicherzustellen, dass Unterstriche nicht als Platzhalter behandelt werden. Verwenden Sie alternativ substr(table_name, 1, 7) = 'PREFIX_' .

Das Löschen der falschen Tabelle ist keine Katastrophe, vorausgesetzt, Sie arbeiten mit 10g oder höher und der RECYCLE BIN ist aktiviert , aber es ist immer noch besser, es nicht zu tun. Natürlich würden Sie Code wie diesen nicht in der Produktion ausführen, aber Sie würden das Prinzip verwenden, um ein Skript mit Drop-Anweisungen zu generieren.

Der obige Code behandelt keine Abhängigkeiten. Wenn Sie Fremdschlüssel haben, die auf die Tabellen mit Präfix verweisen, und Sie das Löschen der Tabellen erzwingen möchten, verwenden Sie diese zusätzliche Logik:

     execute immediate 'drop table '|| trec.table_name ||' cascade constraint';

Dadurch werden die Fremdschlüsselbeschränkungen aufgehoben, aber die (ehemals) abhängigen Tabellen verbleiben.