it-swarm.com.de

Wie lösche ich alle Benutzertabellen?

Wie kann ich alle Benutzertabellen in Oracle löschen?

Ich habe ein Problem mit Einschränkungen. Wenn ich alles deaktiviere ist es immer noch nicht möglich.

152
szaman
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;
/
281
Henry Gao

Wenn Sie nur einen wirklich einfachen Weg wollen, dies zu tun. Hier ist ein Skript, das ich in der Vergangenheit verwendet habe

select 'drop table '||table_name||' cascade constraints;' from user_tables;

Dadurch wird eine Reihe von Drop-Befehlen für alle Tabellen im Schema gedruckt. Spoolen Sie das Ergebnis dieser Abfrage und führen Sie sie aus.

Quelle: https://forums.Oracle.com/forums/thread.jspa?threadID=61409

Wenn Sie mehr als nur Tabellen löschen möchten, können Sie die folgenden Elemente Ihren Anforderungen entsprechend bearbeiten

select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
194
khylo

Eine andere Antwort, die für mich funktioniert hat, ist (Dank an 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;

Beachten Sie, dass dies sofort funktioniert, nachdem Sie es ausgeführt haben. Es erzeugt [~ # ~] nicht [~ # ~] ein Skript, das Sie irgendwo einfügen müssen (wie andere Antworten hier). Es läuft direkt auf der DB.

44
kazanaki
begin
  for i in (select 'drop table '||table_name||' cascade constraints' tbl from user_tables) 
  loop
     execute immediate i.tbl;
  end loop;
end;
21
Md. Maksud Alam

Am einfachsten ist es, den Benutzer, dem die Objekte gehören, mit dem Befehl cascade zu löschen.

DROP USER username CASCADE
11
Brian

Der einfachste Weg wäre, den Tablespace zu löschen und dann den Tablespace wieder aufzubauen. Das möchte ich aber lieber nicht. Dies ist ähnlich wie bei Henry, außer dass ich nur das Resultset in meiner GUI kopiere/füge.

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')
6
TJR
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 generiert eine DROP-Anweisung für jede Tabelle, die Sie ausführen können

2
ANiket Chavan

So entfernen Sie alle Objekte in Oracle:

1) Dynamisch

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) Statisch

    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');
1
Goyal Vicky