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?
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?
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.
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
Nein, Sie müssen 'user_tables' verwenden. Es ist eine Ansicht von allen Tabellen, wo Sie der Besitzer sind. – DirkNM
Hier ist ein Beispiel: http://sqlfiddle.com/#!4/898b1/1 – DirkNM
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;
/
Ich würde auch hinzufügen CASCADE CONSTRAINTS – Multisync
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
@Deepu in Where-Klausel können wir "nicht in" -Operator verwenden und dann setzen wir alle sechs Namen dort drüben? – vim
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.
;\ndrop table
das Komma Symbol ,
drop table
vor Ihrer ersten Tabelle und ;
nach Ihrer letzten.
Wenn ich Sie wäre, würde ich die sechs Tabellen exportieren, alles löschen und die sechs Tabellen wiederherstellen. – Raptor
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. –
@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