SQL 解説書

SET INTEGRITY

SET INTEGRITY 105 ステートメントは、以下を行う場合に使用します。

表がロードされた後でその保全性を検査するためにステートメントを使用する場合、 システムはデフォルトで、制約に違反する追加部分だけを検査するという、 増分的な表の処理を行います。 ただし、データの保全性を保証するために、 システムは (制約に違反する表全体を検査するという) 完全検査を行うことにする場合もあります。 また、ユーザーが INCREMENTAL オプションを指定して、 増分処理を明示的に要求することが必要な場合もあります。 詳細については、 を参照してください。

SET INTEGRITY ステートメントは、トランザクションの制御下にありません。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むか、 または動的 SQL ステートメントを使用して発行することができます。 このステートメントは、動的に準備可能な実行可能ステートメントです。 しかし、バインド・オプション DYNAMICRULES BIND を適用する場合は、 ステートメントを動的に作成することはできません (SQLSTATE 42509)。

許可

SET INTEGRITY の実行に必要な特権は、 ステートメントの使用法によって以下のように異なります。

  1. 保全性検査をオフにする場合。

    ステートメントの許可 ID の特権には、 少なくとも次のいずれかが含まれている必要があります。

  2. 保全性検査をオンにして、検査を実行する場合。

    ステートメントの許可 ID の特権には、 少なくとも次のいずれかが含まれている必要があります。

  3. 最初に検査を実行することなく保全性検査をオンにする場合。

    このステートメントの許可 ID には、少なくとも次のいずれかが必要です。

構文

                  (1)
>>-SET--INTEGRITY----------------------------------------------->
 
             .-,-------------.
             V               |
>-----+-FOR-----table-name---+---+-OFF---------------------------------------+---+>
      |                          +-TO DATALINK RECONCILE PENDING-------------+   |
      |                          '-IMMEDIATE CHECKED--+--------------------+-'   |
      |                                               '-| check-options |--'     |
      |      .-,-------------------------------------.                           |
      |      V                                       |                           |
      '-FOR-----table-name--|  integrity-options |---+--IMMEDIATE UNCHECKED-- ---'
 
>--------------------------------------------------------------><
 
check-options
 
|--*---+-------------+---*---+-----------------+---*------------>
       '-INCREMENTAL-'       '-FORCE GENERATED-'
 
>-----+-----------------------+---------------------------------|
      '-|  exception-clause |-'
 
 exception-clause
 
                      .-,----------------------------------.
                      V                                    |
|---FOR--EXCEPTION-------IN--table-name--USE--table-name---+----|
 
 integrity-options
 
|---+-ALL----------------------------------+--------------------|
    |  .-,-------------------------------. |
    |  V                                 | |
    '----+-FOREIGN KEY----------------+--+-'
         +-CHECK----------------------+
         +-DATALINK RECONCILE PENDING-+
         +-SUMMARY--------------------+
         '-GENERATED COLUMN-----------'
 

注:

  1. 以前のバージョンとの互換性を保つために、 キーワード CONSTRAINTS は引き続きサポートされています。

説明

table-name
保全性処理を行う表を指定します。 これは、カタログに記述されている表でなければならず、 視点、カタログ表、またはタイプ付き表を対象にすることはできません。

OFF
表の外部キー制約、検査制約、および列の生成をオフにして、 表を検査保留状態にすることを指定します。 表が要約表であれば、即時最新表示はオフになり (該当する場合)、要約表は検査保留状態に置かれます。

表が、保全性検査の 1 つのタイプだけがオフの、 検査保留状態にすでになっている可能性がある点に注意してください。 そのような場合、他のタイプの保全性検査もオフになります。

リストに指定する表のいずれかが親表である場合、 外部キー制約に関する検査保留状態は、その従属表と子孫表のすべてに拡張されます。

リストに指定する表のいずれかが要約表の基礎表である場合、 検査保留状態はそのような要約表にも拡張されます。

検査保留状態にある表に対しては、極めて限定されたアクティビティーのみが許されます。 それらの制約は、にリストされています。

TO DATALINK RECONCILE PENDING
表の DATALINK 保全性制約検査をオフにし、検査保留状態にするよう指定します。 表がすでにデータ・リンク調整不能 (DRNP) 状態である場合は、 そのまま検査保留状態になります。 そうでない場合には、表はデータ・リンク調整保留 (DRP) 状態に設定されます。

このオプションを指定しても、従属表および下層表には影響がありません。

IMMEDIATE CHECKED
表の保全性検査をオンにし、据え置かれている保全性検査を行うことを指定します。 これは、SYSCAT.TABLES カタログの STATUS 列と CONST_CHECKED 列の情報に基づいて行われます。 すなわち、

表が要約表であれば、データは必要に応じて照会で検査され、最新表示されます。

表が DRP または DRNP 状態であっても、DATALINK 値は検査されません。 DATALINK 値の調整を実行するには、RECONCILE コマンドまたは API を使用してください。 表は検査保留状態ではなくなりますが、DRP または DRNP フラグはセットされたままとなります。 これにより、DATALINK 値の調整をある時間まで据え置いておいて、 その間に表を使用することが可能になります。

check-options

FORCE GENERATED
表に生成された列が含まれている場合は、式に基づいてその値が計算され、列に保管されます。 この文節が指定されない場合は、等価検査の制約があるかのように、 現行値が式の算出値と比較されます。

INCREMENTAL
表の追加部分 (もしあれば) に対して保全性検査が据え置かれているアプリケーションを指定します。 この要求が満たされない場合 (たとえば、 システムが表全体でデータ保全性検査を実行する必要があると判断する場合)、 エラー (SQLSTATE 55019) が戻されます。 属性を指定しない場合、システムは増分処理が可能かどうかを判断します。 それが可能でなければ、表全体が検査されます。 増分処理よりも完全処理 (表全体の保全性検査) を好むシステムについては、注を参照してください。 また、INCREMENTAL オプションを必要とする状態と、 INCREMENTAL オプションを指定できない状態については、注を参照してください。

表が検査保留状態にない場合、エラー (SQLSTATE 55019) が戻されます。

exception-clause

FOR EXCEPTION
外部キー制約または検査制約に違反している行があれば、 その行を例外表にコピーして、元の表から削除することを指定します。 それらのユーザー定義表については、付録 N, 例外表 を参照してください。 エラーが検出されても、制約は再びオンに戻り、表は検査保留状態ではなくなります。 1 つまたは複数の行が例外表に移されたことを示す警告 (SQLSTATE 01603) が出されます。

FOR EXCEPTION 文節の指定がない場合に、制約違反が生じると、 検出された最初の違反だけがユーザーに戻されます (SQLSTATE 23514)。 表のいずれかに違反がある場合、すべての表は、 ステートメント実行前と同じ検査保留状態のままになります。 table-name が要約表であれば、この文節は指定できません (SQLSTATE 42997)。

IN table-name
制約に違反している行のコピー元である表を table-name に指定します。 検査される各表ごとに、1 つの例外表を指定する必要があります。

USE table-name
エラー行のコピー先である例外表を table-name に指定します。

integrity-options
IMMEDIATE UNCHECKED に設定される保全性オプションを定義するのに使用します。

ALL
すべての保全性オプションをオンにすることを指定します。

FOREIGN KEY
外部キー制約をオンにすることを指定します。

CHECK
検査制約をオンにすることを指定します。

DATALINK RECONCILE PENDING
DATALINK 保全性制約をオンにすることを指定します。

SUMMARY
REFRESH IMMEDIATE 属性が指定された要約表で、 即時最新表示をオンにすることを指定します。

GENERATED COLUMN
生成された列をオンにすることを指定します。

IMMEDIATE UNCHECKED
以下のいずれかを指定します。

状態の変更は、リストに明示的に含まれていない表には拡張されません。

従属表の親が検査保留状態である場合、 従属表の外部キー制約の検査を回避することはできません (検査制約の検査は回避できます)。

このオプションの使用に先立って、データ保全性に関連する影響について検討する必要があります。 を参照してください。

例 1: 以下は、表の検査保留状態に関する情報を入手する照会の例です。 SUBSTR を使用して、SYSCAT.TABLES の CONST_CHECKED 列の最初の 2 バイトを抽出しています。 最初の 1 バイトは外部キー制約、2 番目バイトは検査制約を表します。

   SELECT TABNAME,
     SUBSTR( CONST_CHECKED, 1, 1 ) AS FK_CHECKED,
     SUBSTR( CONST_CHECKED, 2, 1 ) AS CC_CHECKED
     FROM SYSCAT.TABLES
     WHERE STATUS = 'C'

例 2: 表 T1 と T2 を検査保留状態に設定します。

   SET INTEGRITY FOR T1, T2 OFF

例 3: T1 の保全性を検査して、最初の違反のみを入手します。

   SET INTEGRITY FOR T1 IMMEDIATE CHECKED    

例 4: T1 と T2 の保全性を検査し、違反する行を例外表 E1 と E2 に入れます。

   SET INTEGRITY FOR T1, T2 IMMEDIATE CHECKED
      FOR EXCEPTION IN T1 USE E1,
                    IN T2 USE E2

例 5: T1 の FOREIGN KEY 制約検査を使用可能にし、 T2 の CHECK 制約検査を IMMEDIATE CHECKED オプションを指定してバイパスします。

   SET INTEGRITY FOR T1 FOREIGN KEY,
                     T2 CHECK IMMEDIATE UNCHECKED

例 6: 2 つの ALTER TABLE ステートメントを使用して、 検査制約と外部キーを EMP_ACT 表に追加します。 表を単一パスで制約の検査を実行するには、 保全性検査をオフにして ALTER ステートメントを実行し、その実行後に制約検査を行います。

   SET INTEGRITY FOR EMP_ACT OFF;
   ALTER TABLE EMP_ACT ADD CHECK (EMSTDATE <= EMENDATE);
   ALTER TABLE EMP_ACT ADD FOREIGN KEY (EMPNO) REFERENCES EMPLOYEE;
   SET INTEGRITY FOR EMP_ACT IMMEDIATE CHECKED

例 7: 生成された列に保全性を設定します。

   SET INTEGRITY FOR T1 IMMEDIATE CHECKED
      FORCE GENERATED


脚注:

105
DB2 では、保全性の検査を行う方法として、 SET CONSTRAINTS ステートメントよりも SET INTEGRITY ステートメントが頻繁に使用されます。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]