ALTER ASSERTION

目的

ALTER ASSERTIONを使用すると、アサーションのプロパティ(ENABLEDISABLEVALIDATENOVALIDATEのいずれか)を変更できます。

前提条件

指定したスキーマまたは自分のスキーマでないスキーマ内のアサーションを変更するには、ALTER ANY ASSERTION [ ON SCHEMA …] privilegeが必要です。

セマンティクス

IF EXISTS

変更しようとしているアサーションが存在しない場合にエラー・メッセージを回避するには、IF EXISTSを指定します。

IF NOT EXISTSALTER文とともに使用することはできません。

アサーションのプロパティを変更する場合は、次のルールが適用されます:

  • DISABLEからENABLEへの移動では、デフォルトでVALIDATEが使用されます。ENABLEからDISABLEへの移動では、デフォルトでNOVALIDATEが使用されます。DISABLE VALIDATEはサポートされていません。

  • デフォルトでは、VALIDATENOVALIDATEの間で移動しても、ENABLEDISABLEは変更されません。

  • 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 ASSERTIONALTER ANY ASSERTION ON SCHEMA hrのいずれかの権限を持っている必要があります