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.

War es hilfreich?

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

bearbeiten
select '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');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top