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

2 Möglichkeiten zum Erstellen einer Tabelle, wenn sie noch nicht in Oracle vorhanden ist

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.