2014-11-17 12 views
9

Ich habe fünfzig Tabellen in einer Datenbank, in denen ich brauche nur sechs Tabellen.Oracle - drop mehrere Tabelle in einer einzigen Abfrage

Wie kann ich die restlichen Tabellen nach einer einzigen Abfrage löschen?

+3

Wenn ich Sie wäre, würde ich die sechs Tabellen exportieren, alles löschen und die sechs Tabellen wiederherstellen. – Raptor

+0

Haben Sie kein Werkzeug wie SQL Developer oder Toad? Klicken Sie einfach auf die Tabellen (mit Shift und Strg, wenn Sie möchten), und klicken Sie auf Drop. –

+0

@ThorstenKettner Ich habe SQL-Entwickler, aber das Problem ist, dass ich mehrere Tabellen auswählen kann, aber nach der Auswahl mehrerer Tabellen gibt es keine "Drop" -Option. – vim

Antwort

18

Sie eine Liste der DROP TABLE-Befehle mit der Abfrage unten generieren zu tun:

SELECT 'DROP TABLE ' || table_name || ';' FROM user_tables; 

Danach entfernen Sie Ihre sechs Tabellen, die Sie behalten möchten, und führen die anderen Befehle aus. Oder Sie fügen der Abfrage eine WHERE table_name NOT IN (...)-Klausel hinzu.

Ich hoffe, es hilft.

+0

es gibt Fehler, wenn ich run.SQL Error: ORA-00942: Tabelle oder Sicht ist nicht vorhanden. Ich habe diese Abfrage SELECT 'DROP TABLE' || verwendet Tabellenname || ';' Von pmd_dba; hier pmd_dba ist Datenbank – vim

+0

Nein, Sie müssen 'user_tables' verwenden. Es ist eine Ansicht von allen Tabellen, wo Sie der Besitzer sind. – DirkNM

+0

Hier ist ein Beispiel: http://sqlfiddle.com/#!4/898b1/1 – DirkNM

7

Verwendung so etwas, da es keine direkte ist Befehl oder Art und Weise in Oracle diese

begin 
    for rec in (select table_name 
       from all_tables 
       where table_name like '%ABC_%' 
      ) 
    loop 
    execute immediate 'drop table '||rec.table_name; 
    end loop;    
end; 
/
+1

Ich würde auch hinzufügen CASCADE CONSTRAINTS – Multisync

+2

Und ich würde 'user_tables' anstelle von' all_tables' verwenden. Andernfalls ist es möglich, eine Tabelle mit demselben Namen in einem anderen Schema zu löschen (wenn Sie DROP-Berechtigungen haben). – DirkNM

+0

@Deepu in Where-Klausel können wir "nicht in" -Operator verwenden und dann setzen wir alle sechs Namen dort drüben? – vim

1

Zuerst Führen Sie diese Abfrage mit Tabellennamen aus, die Sie behalten möchten.

SELECT CONCAT('DROP TABLE ', GROUP_CONCAT(table_name) , ';') 
AS statement FROM information_schema.tables 
WHERE table_schema = 'mydatabase' AND table_name not in ('table1', 'table2', 'table3'); 

Diese Abfrage gibt Ihnen DROP-Tabellenabfrage.

0
  1. Wählen Sie aus der Liste auf der linken Seite alle Tabellen aus, die Sie löschen möchten. Ziehen Sie sie in Ihr Arbeitsblatt und legen Sie sie dort ab. Wählen Sie Objektname aus dem Popup-Fenster
  2. Drücken Sie das Menü Bearbeiten und wählen Sie Ersetzen.
  3. Geben Sie in das Suchfeld den folgenden Text ;\ndrop table das Komma Symbol ,
  4. Typ im Feld ersetzen. Beachten Sie, dass hinter der Worttabelle ein Leerzeichen steht. Alles ersetzen.
  5. Typ drop table vor Ihrer ersten Tabelle und ; nach Ihrer letzten.
  6. Sie sind bereit, Ihre Tische fallen zu lassen.
Verwandte Themen