DROP DOMAIN
目的
この文はドメインを削除して、そのすべての依存オブジェクトからドメインの関連付けを解除する場合に使用します。
前提条件
ドメインが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY DOMAIN
システム権限が必要です。
構文
drop_domain::=
セマンティクス
IF EXISTS
存在しているドメインを削除するには、IF EXISTS
を指定します。
DROP DOMAIN
とともにIF NOT EXISTS
を指定することはできません。これを行うと、ORA-11544: 「ALTER/DROP文のIF EXISTS句が正しくありません。」
というエラーが発生します。
ドメインを削除するには、そのドメイン名を指定し、そのすべての依存列から関連付けを解除します。次の例では、email
はドメイン名の名前です:
DROP DOMAIN email;
ドメインが列に関連付けられている場合、DROP DOMAIN
domain_name
はORA-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_DISPLAY
、DOMAIN_ORDER
、DOMAIN_NAME
などのドメイン・ファンクションを参照するマテリアライズド・ビュー(MV)は、完全にリフレッシュできるように無効化されます。特定のドメインの列を参照するMVは、無効化されません。 -
ドメインを正常に削除します。
ドメインを参照するフレキシブル・ドメインがある場合は、FORCE
オプションの指定なしにDROP DOMAIN
を実行するとエラーが発生します。一方、DROP DOMAIN FORCE
はFORCE
モードですべてのフレキシブル依存ドメインを削除します。
例
次の例では、domain day_of_week
を削除します。ドメインに関連付けられた列がある場合、文ではORA-11502
が発生し、ドメインが残ります:
DROP DOMAIN day_of_week;
次の文は、domain day_of_week
を削除します。列が関連付けられている場合、列は次のドメインからデフォルトおよび制約を継承します:
DROP DOMAIN day_of_week FORCE PRESERVE;