sql >> データベース >  >> RDS >> Oracle

Oracleにテーブルがまだ存在しない場合にテーブルを作成する2つの方法

    Oracle Databaseには、IF NOT EXISTSは含まれていません CREATE TABLEを含む句 他のDBMSと同様に、ステートメント。

    したがって、テーブル名がすでに使用されているためにエラーを発生させたくない場合は、他の方法を使用してテーブルの存在を確認する必要があります。

    オプション1:DBA_TABLESを確認します 表示

    DBA_TABLES データベース内のすべてのリレーショナルテーブルを説明するデータディクショナリビューです。その列はALL_TABLESの列と同じです 。

    このテーブルをチェックして、テーブルがすでに存在するかどうかを確認してから、CREATE TABLEのみを実行できます。 まだ存在しない場合はステートメント。

    例:

    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;

    結果:

    PL/SQL procedure successfully completed.

    この場合、t1という名前の既存のテーブルがないため、テーブルが作成されました。 。

    ここで、テーブルを再度作成しようとすると、PL / SQLプロシージャが正常に完了したのと同じ出力が得られ、エラーは発生しません。

    ただし、最初にテーブルの存在を確認せずにテーブルを作成しようとすると、エラーが発生します。

    CREATE TABLE T1 (
        c1 number(6,0),
        c2 varchar2(10)
    );

    結果:

    Error report -
    ORA-00955: name is already used by an existing object
    00955. 00000 -  "name is already used by an existing object"

    オプション2:エラーをテストする

    これを行う別の方法は、単に先に進んでCREATE TABLEを実行することです。 ステートメントを実行し、発生したORA-00955エラーをキャッチします。具体的には、発生したSQLCODE-955エラーをキャッチします。

    例:

    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;

    結果:

    PL/SQL procedure successfully completed.

    T1なのに、それを実行しました テーブルはすでに存在していました。 ORA-00955エラーがキャッチされて処理されたため、エラーメッセージは表示されず、テーブルは作成されませんでした。

    テーブルがまだ存在していなかった場合は、テーブルが作成され、同じ出力が表示されます。


    1. テーブルは、「UPDATE」のターゲットとmysqlのデータの個別のソースの両方として2回指定されます

    2. パスワードに特殊文字が含まれている場合、JDBCを使用してOracleデータベースに接続できません

    3. PHP/MySQLの特殊文字

    4. Fedora33にPostgreSQL12をインストールする方法