DROP DOMAIN

目的

この文はドメインを削除して、そのすべての依存オブジェクトからドメインの関連付けを解除する場合に使用します。

前提条件

ドメインが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY DOMAINシステム権限が必要です。

構文

セマンティクス

IF EXISTS

存在しているドメインを削除するには、IF EXISTSを指定します。

DROP DOMAINとともにIF NOT EXISTSを指定することはできません。これを行うと、ORA-11544: 「ALTER/DROP文のIF EXISTS句が正しくありません。」というエラーが発生します。

ドメインを削除するには、そのドメイン名を指定し、そのすべての依存列から関連付けを解除します。次の例では、emailはドメイン名の名前です:

DROP DOMAIN email;

ドメインが列に関連付けられている場合、DROP DOMAIN domain_nameORA-11502: 「削除するドメイン<domain_name>には依存オブジェクトがあります。」で失敗します。これには、ごみ箱内の表が含まれます。

さらに、異なる意味を持つ2つのオプション・キーワードFORCEまたはFORCE PRESERVEのいずれかを指定して、ドメインを削除することもできます。

FORCE

DROP DOMAIN domain_name FORCEは、ドメインをそのすべての依存列から関連付け解除します。これには、ドメインから継承された列に対するすべての制約を削除することも含まれます。ドメインから継承されたデフォルトも削除されますが、これらのデフォルトが列に対して特別に設定されていた場合は除きます。

ドメインを削除する必要があり、ごみ箱に依存表がある場合は、FORCEオプションを使用する必要があります。

FORCE PRESERVE

ドメインから継承されたドメインのデフォルトおよび列に対するドメイン制約を保持する場合は、DROP DOMAIN domain_name FORCE PRESERVEを使用します。PRESERVEオプションを指定するには、最初にFORCEを指定する必要があります。このオプションは、ドメインを一時的に削除し、その後に新しいデータと以前の依存列でドメインを再作成する場合に使用します。この場合、ドメインから継承したすべての制約とデフォルトを保持したまま、表データがドメイン定義との整合性を維持するようにすることが必要になります。FORCE PRESERVEを指定してドメインを削除し、後でそのドメインを再作成して、列を再度関連付けた場合、2つ目の制約になることがあります。この場合は、ALTER TABLE DROP CONSTRAINTを使用して2つ目の制約を削除します。

指定されたドメインの列を含む表またはマテリアライズド・ビューがない場合、DROP DOMAINはSQL依存文を無効にして、カタログからドメイン・オブジェクトを削除します。この場合は、ドメインまたはドメインの依存オブジェクトに影響を与えることなく、FORCEおよびFORCE PRESERVEを指定できます。

指定されたドメインの列を含む表またはマテリアライズド・ビューがある場合、FORCEオプションなしのDROP DOMAINは、ドメインまたはドメインの依存オブジェクトに影響を与えることなく失敗します。

指定されたドメインの列を含む表またはマテリアライズド・ビューがある場合、DROP DOMAIN FORCEは次のように動作します。

  • ドメインのデフォルトとしてのみ設定されていたデフォルト式が列にある場合は、依存列からデフォルト式を削除します。列にデフォルト式が追加されていて、ドメインのデフォルトとして設定されていた場合、列のデフォルトは保持されます。

  • すべての依存列からドメインの注釈を削除します

  • ドメイン依存列に対する照合を保持します。

  • カーソル・キャッシュ内のすべてのSQL依存文を無効にします。

  • DOMAIN_DISPLAYDOMAIN_ORDERDOMAIN_NAMEなどのドメイン・ファンクションを参照するマテリアライズド・ビュー(MV)は、完全にリフレッシュできるように無効化されます。特定のドメインの列を参照するMVは、無効化されません。

  • ドメインを正常に削除します。

ドメインを参照するフレキシブル・ドメインがある場合は、FORCEオプションの指定なしにDROP DOMAINを実行するとエラーが発生します。一方、DROP DOMAIN FORCEFORCEモードですべてのフレキシブル依存ドメインを削除します。

次の例では、domain day_of_weekを削除します。ドメインに関連付けられた列がある場合、文ではORA-11502が発生し、ドメインが残ります:

DROP DOMAIN day_of_week;

次の文は、domain day_of_weekを削除します。列が関連付けられている場合、列は次のドメインからデフォルトおよび制約を継承します:

DROP DOMAIN day_of_week FORCE PRESERVE;