MySQL とは異なり、Oracle データベースにはテーブル操作のための直接の IF EXISTS
構文がありません。ただし、次の方法で同様の機能を実現できます。
最も効率的な方法は、「テーブルが存在しない」例外をキャッチすることです:
<code class="language-sql">BEGIN EXECUTE IMMEDIATE 'DROP TABLE ' || table_name; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;</code>
このメソッドでは、他のメソッドのようにテーブルが存在するかどうかを 2 回確認する必要がなくなります。
IF EXISTS
構文 (Oracle 23c 以降) Oracle バージョン 23c 以降、すべての DROP
DDL 操作は、より単純な IF EXISTS
構文をサポートします:
<code class="language-sql">BEGIN EXECUTE IMMEDIATE 'DROP TABLE IF EXISTS ' || table_name; END;</code>
同様の例外処理ブロックは、他の Oracle オブジェクト タイプにも使用できます。
<code class="language-sql">BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE ' || sequence_name; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;</code>
<code class="language-sql">BEGIN EXECUTE IMMEDIATE 'DROP VIEW ' || view_name; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;</code>
<code class="language-sql">BEGIN EXECUTE IMMEDIATE 'DROP TRIGGER ' || trigger_name; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -4080 THEN RAISE; END IF; END;</code>
<code class="language-sql">BEGIN EXECUTE IMMEDIATE 'DROP INDEX ' || index_name; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -1418 THEN RAISE; END IF; END;</code>
<code class="language-sql">BEGIN EXECUTE IMMEDIATE 'ALTER TABLE ' || table_name || ' DROP COLUMN ' || column_name; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -904 AND SQLCODE != -942 THEN RAISE; END IF; END;</code>
以上がOracle でテーブルの存在を確認し、条件付き DDL 操作を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。