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

Oracle DROP TABLE IF EXISTS Alternatives

    OracleDatabaseにはIF EXISTSは含まれていません 他のいくつかのDBMSがDROP TABLEで提供する句 ステートメント。したがって、存在しないテーブルを削除しようとしたことによる厄介なエラーを回避したい場合は、少し余分な作業を行う必要があります。

    オプション1:テーブルが存在するかどうかを確認します

    DBA_TABLESを確認できます テーブルが存在するかどうかを確認するためのデータディクショナリビュー。このビューは、データベース内のすべてのリレーショナルテーブルを記述します。その列はALL_TABLESの列と同じです 。

    このテーブルをチェックしてテーブルが存在するかどうかを確認してから、DROP 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:='DROP TABLE T1';
            EXECUTE IMMEDIATE sql_stmt;
        END IF;
    END;

    結果:

    PL/SQL procedure successfully completed.

    この場合、t1というテーブル すでに存在し、削除されました。

    ここで、同じコードを再度実行すると、同じ出力が得られます:

    PL/SQL procedure successfully completed.

    テーブルが存在しなくても、エラーは発生しませんでした。

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

    DROP TABLE T1;

    結果:

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

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

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

    例:

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

    結果:

    PL/SQL procedure successfully completed.

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

    テーブルがすでに存在していた場合、テーブルは削除され、同じ出力が表示されます。


    1. マテリアライズドビュークエリを変更する

    2. 週末を除く2つの日付の間の日数をカウントします(MySQLのみ)

    3. NetBeans 9.0、パート2のJava9でJShellを使用する

    4. チェック制約は別のテーブルに関連付けることができますか?