Oracle Database enthält den IF NOT EXISTS
nicht -Klausel mit ihrem CREATE TABLE
-Anweisung, wie es einige andere DBMS tun.
Wenn wir also keinen Fehler aufgrund des bereits verwendeten Tabellennamens erzeugen wollen, müssen wir andere Methoden verwenden, um die Existenz der Tabelle zu überprüfen.
Option 1:Überprüfen Sie die DBA_TABLES
Anzeigen
DBA_TABLES
ist eine Datenwörterbuchansicht, die alle relationalen Tabellen in der Datenbank beschreibt. Seine Spalten sind dieselben wie in ALL_TABLES
.
Wir können diese Tabelle überprüfen, um zu sehen, ob die Tabelle bereits existiert, und dann nur CREATE TABLE
ausführen Anweisung, falls noch nicht vorhanden.
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:='
CREATE TABLE T1 (
c1 number(6,0),
c2 varchar2(10)
)';
EXECUTE IMMEDIATE sql_stmt;
END IF;
END;
Ergebnis:
PL/SQL procedure successfully completed.
In diesem Fall wurde die Tabelle erstellt, weil keine vorhandene Tabelle den Namen t1
hatte .
Wenn wir nun versuchen, die Tabelle erneut zu erstellen, erhalten wir dieselbe Ausgabe, die die PL/SQL-Prozedur erfolgreich abgeschlossen hat, und es wird kein Fehler angezeigt.
Wenn wir jedoch einfach versuchen, die Tabelle zu erstellen, ohne vorher auf ihre Existenz zu prüfen, erhalten wir einen Fehler:
CREATE TABLE T1 (
c1 number(6,0),
c2 varchar2(10)
);
Ergebnis:
Error report - ORA-00955: name is already used by an existing object 00955. 00000 - "name is already used by an existing object"
Option 2:Auf Fehler testen
Eine andere Möglichkeit besteht darin, einfach CREATE TABLE
auszuführen -Anweisung und fangen Sie dann jeden ORA-00955-Fehler ab, der auftritt. Insbesondere fangen wir jeden SQLCODE -955-Fehler ab, der auftritt.
Beispiel:
DECLARE
sql_stmt long;
BEGIN
sql_stmt:='
CREATE TABLE T1 (
c1 number(6,0),
c2 varchar2(10)
)';
EXECUTE IMMEDIATE sql_stmt;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -955 THEN
NULL;
ELSE
RAISE;
END IF;
END;
Ergebnis:
PL/SQL procedure successfully completed.
Ich habe das ausgeführt, obwohl der T1
Tabelle existierte bereits. Der Fehler ORA-00955 wurde abgefangen und behandelt, sodass wir keine Fehlermeldung erhielten und die Tabelle nicht erstellt wurde.
Wenn die Tabelle nicht bereits existiert hätte, wäre die Tabelle erstellt worden und wir würden dieselbe Ausgabe sehen.