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エラーがキャッチされて処理されたため、エラーメッセージは表示されませんでした。
テーブルがすでに存在していた場合、テーブルは削除され、同じ出力が表示されます。