Wie alle Benutzertabellen fallen?
-
18-09-2019 - |
Frage
Wie kann ich fallen alle Benutzertabellen in Oracle?
Ich habe Probleme mit Einschränkungen. Wenn ich alle deaktivieren Sie es noch nicht möglich ist.
Lösung
BEGIN
FOR cur_rec IN (SELECT object_name, object_type
FROM user_objects
WHERE object_type IN
('TABLE',
'VIEW',
'MATERIALIZED VIEW',
'PACKAGE',
'PROCEDURE',
'FUNCTION',
'SEQUENCE',
'SYNONYM',
'PACKAGE BODY'
))
LOOP
BEGIN
IF cur_rec.object_type = 'TABLE'
THEN
EXECUTE IMMEDIATE 'DROP '
|| cur_rec.object_type
|| ' "'
|| cur_rec.object_name
|| '" CASCADE CONSTRAINTS';
ELSE
EXECUTE IMMEDIATE 'DROP '
|| cur_rec.object_type
|| ' "'
|| cur_rec.object_name
|| '"';
END IF;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ( 'FAILED: DROP '
|| cur_rec.object_type
|| ' "'
|| cur_rec.object_name
|| '"'
);
END;
END LOOP;
END;
/
Andere Tipps
Wenn Sie nur wollen, eine wirklich einfache Möglichkeit, dies zu tun .. Heres ein Skript, das ich in der Vergangenheit verwendet habe
select 'drop table '||table_name||' cascade constraints;' from user_tables;
Dies wird eine Reihe von Drop-Befehlen für alle Tabellen im Schema ausdrucken. Spool das Ergebnis dieser Abfrage und führen Sie es.
Quelle: https://forums.oracle.com/forums/thread.jspa?threadID=614090
Ebenso, wenn Sie mehr als Tabellen löschen möchten, können Sie die folgenden Funktionen Ihre Bedürfnisse anzupassen
bearbeitenselect 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
Eine andere Antwort, die für mich gearbeitet ist (Gutschrift auf http://snipt.net/Fotinakis/drop-all-tables-and-constraints-within-an-oracle-schema/ )
BEGIN
FOR c IN (SELECT table_name FROM user_tables) LOOP
EXECUTE IMMEDIATE ('DROP TABLE "' || c.table_name || '" CASCADE CONSTRAINTS');
END LOOP;
FOR s IN (SELECT sequence_name FROM user_sequences) LOOP
EXECUTE IMMEDIATE ('DROP SEQUENCE ' || s.sequence_name);
END LOOP;
END;
Hinweis , dass dies funktioniert sofort , nachdem Sie es laufen. Es tut nicht erzeugt ein Skript, das Sie irgendwo einfügen müssen (wie andere Antworten hier). Es läuft direkt auf der DB.
begin
for i in (select 'drop table '||table_name||' cascade constraints' tbl from user_tables)
loop
execute immediate i.tbl;
end loop;
end;
Der einfachste Weg ist es, den Benutzer zu löschen, die die Objekte mit der Kaskade-Befehl besitzt.
DROP USER username CASCADE
Der einfachste Weg wäre, die Tabellen fällt dann die Tabellen bauen wieder auf. Aber ich habe lieber nicht zu tun. Dies ist vergleichbar mit Henrys außer, dass ich nur eine Kopie / Paste auf dem Suchresultates in meinem gui tun.
SELECT
'DROP'
,object_type
,object_name
,CASE(object_type)
WHEN 'TABLE' THEN 'CASCADE CONSTRAINTS;'
ELSE ';'
END
FROM user_objects
WHERE
object_type IN ('TABLE','VIEW','PACKAGE','PROCEDURE','FUNCTION','SEQUENCE')
SELECT 'DROP TABLE "' || TABLE_NAME || '" CASCADE CONSTRAINTS;'
FROM user_tables;
user_tables
ist eine Systemtabelle, die alle Tabellen des Benutzers enthält
die SELECT-Klausel wird eine DROP-Anweisung für jede Tabelle erzeugen
Sie können das Skript ausführen
Um alle Objekte in Orakel zu entfernen:
1) Dynamische
DECLARE
CURSOR IX IS
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE ='TABLE'
AND OWNER='SCHEMA_NAME';
CURSOR IY IS
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE
IN ('SEQUENCE',
'PROCEDURE',
'PACKAGE',
'FUNCTION',
'VIEW') AND OWNER='SCHEMA_NAME';
CURSOR IZ IS
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('TYPE') AND OWNER='SCHEMA_NAME';
BEGIN
FOR X IN IX LOOP
EXECUTE IMMEDIATE('DROP '||X.OBJECT_TYPE||' '||X.OBJECT_NAME|| ' CASCADE CONSTRAINT');
END LOOP;
FOR Y IN IY LOOP
EXECUTE IMMEDIATE('DROP '||Y.OBJECT_TYPE||' '||Y.OBJECT_NAME);
END LOOP;
FOR Z IN IZ LOOP
EXECUTE IMMEDIATE('DROP '||Z.OBJECT_TYPE||' '||Z.OBJECT_NAME||' FORCE ');
END LOOP;
END;
/
2) Static
SELECT 'DROP TABLE "' || TABLE_NAME || '" CASCADE CONSTRAINTS;' FROM user_tables
union ALL
select 'drop '||object_type||' '|| object_name || ';' from user_objects
where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION')
union ALL
SELECT 'drop '
||object_type
||' '
|| object_name
|| ' force;'
FROM user_objects
WHERE object_type IN ('TYPE');