ALTER ASSERTION
目的
ALTER ASSERTIONを使用すると、アサーションのプロパティ(ENABLE、DISABLE、VALIDATE、NOVALIDATEのいずれか)を変更できます。
前提条件
指定したスキーマまたは自分のスキーマでないスキーマ内のアサーションを変更するには、ALTER ANY ASSERTION [ ON SCHEMA …] privilegeが必要です。
セマンティクス
IF EXISTS
変更しようとしているアサーションが存在しない場合にエラー・メッセージを回避するには、IF EXISTSを指定します。
IF NOT EXISTSをALTER文とともに使用することはできません。
アサーションのプロパティを変更する場合は、次のルールが適用されます:
-
DISABLEからENABLEへの移動では、デフォルトでVALIDATEが使用されます。ENABLEからDISABLEへの移動では、デフォルトでNOVALIDATEが使用されます。DISABLEVALIDATEはサポートされていません。 -
デフォルトでは、
VALIDATEとNOVALIDATEの間で移動しても、ENABLEとDISABLEは変更されません。 -
NOVALIDATEからVALIDATEにアサーションを移動するには、すべてのデータのチェックが必要です。これはコストの高い操作になる可能性があります。 -
VALIDATEからNOVALIDATEにアサーションを移動すると、データがチェックされたことが無視されます。 -
ENABLE NOVALIDATEからENABLE VALIDATEにアサーションを移動しても、読取り、書込みまたはその他のDDLはブロックされません。この遷移は、検証問合せに対してパラレル実行を使用して実行できます。
例
例1: アサーションの無効化
次の文は、アサーションcompany_must_have_a_presidentを無効にします:
ALTER ASSERTION IF EXISTS company_must_have_a_president DISABLE;
この名前のアサーションが現在のスキーマに存在しない場合、文はアクションを実行せず、エラーなしで完了します。
例3: アサーションの検証
この文は、アサーションstaff_earn_less_than_managerを検証します:
ALTER ASSERTION staff_earn_less_than_manager VALIDATE;
これにより、問合せのすべての行に対してアサーションが実行されます。既存の行が制約に違反した場合、検証は失敗し、文によってエラーが発生します。
例3: 検証なしのアサーションの有効化
この文により、既存の行が準拠しているかどうかをチェックせずに、HRスキーマのアサーションsalary_within_job_limitが有効になります:
ALTER ASSERTION hr.salary_within_job_limit ENABLE NOVALIDATE;
HRユーザーとして接続していない場合、ユーザーはALTER ANY ASSERTION、ALTER ANY ASSERTION ON SCHEMA hrのいずれかの権限を持っている必要があります
