Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle DROP TABLE IF EXISTS Alternativen

Oracle Database enthält nicht den IF EXISTS -Klausel, die einige andere DBMS in ihrer DROP TABLE anbieten Aussagen. Wenn wir also böse Fehler vermeiden wollen, die durch den Versuch entstehen, eine nicht vorhandene Tabelle zu löschen, müssen wir ein wenig zusätzliche Arbeit leisten.

Option 1:Prüfen Sie, ob die Tabelle existiert

Wir können die DBA_TABLES prüfen Datenwörterbuchansicht, um zu sehen, ob die Tabelle vorhanden ist. Diese Ansicht beschreibt alle relationalen Tabellen in der Datenbank. Seine Spalten sind dieselben wie in ALL_TABLES .

Wir können diese Tabelle überprüfen, um zu sehen, ob die Tabelle existiert, und dann nur DROP TABLE ausführen Anweisung, wenn ja.

Beispiel:

DECLARE
tbl_count number;
sql_stmt long;

BEGIN
    SELECT COUNT(*) INTO tbl_count 
    FROM dba_tables
    WHERE owner = 'HR'
    AND table_name = 'T1';

    IF(tbl_count <> 0)
        THEN
        sql_stmt:='DROP TABLE T1';
        EXECUTE IMMEDIATE sql_stmt;
    END IF;
END;

Ergebnis:

PL/SQL procedure successfully completed.

In diesem Fall die Tabelle namens t1 existierte bereits und wurde gelöscht.

Wenn wir nun denselben Code erneut ausführen, erhalten wir dieselbe Ausgabe:

PL/SQL procedure successfully completed.

Es ist kein Fehler aufgetreten, obwohl die Tabelle nicht mehr existiert.

Wenn wir jedoch einfach versuchen, die Tabelle zu löschen, ohne vorher auf ihre Existenz zu prüfen, erhalten wir einen Fehler:

DROP TABLE T1;

Ergebnis:

Error report -
ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"

Option 2:Auf Fehler testen

Eine andere Möglichkeit besteht darin, einfach die DROP TABLE auszuführen -Anweisung und fangen Sie dann jeden ORA-00942-Fehler ab, der auftritt. Insbesondere fangen wir jeden SQLCODE -942-Fehler ab, der auftritt.

Beispiel:

BEGIN
   EXECUTE IMMEDIATE 'DROP TABLE t1';
EXCEPTION
   WHEN OTHERS THEN
      IF SQLCODE != -942 THEN
         RAISE;
      END IF;
END;

Ergebnis:

PL/SQL procedure successfully completed.

Ich habe das ausgeführt, obwohl der T1 Tabelle existierte nicht. Der Fehler ORA-00942 wurde abgefangen und behandelt, sodass wir keine Fehlermeldung erhalten haben.

Wenn die Tabelle bereits existiert hätte, wäre die Tabelle gelöscht worden und wir würden die gleiche Ausgabe sehen.