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.