SET INTEGRITY 105 ステートメントは、以下を行う場合に使用します。
表がロードされた後でその保全性を検査するためにステートメントを使用する場合、 システムはデフォルトで、制約に違反する追加部分だけを検査するという、 増分的な表の処理を行います。 ただし、データの保全性を保証するために、 システムは (制約に違反する表全体を検査するという) 完全検査を行うことにする場合もあります。 また、ユーザーが INCREMENTAL オプションを指定して、 増分処理を明示的に要求することが必要な場合もあります。 詳細については、注 を参照してください。
SET INTEGRITY ステートメントは、トランザクションの制御下にありません。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込むか、 または動的 SQL ステートメントを使用して発行することができます。 このステートメントは、動的に準備可能な実行可能ステートメントです。 しかし、バインド・オプション DYNAMICRULES BIND を適用する場合は、 ステートメントを動的に作成することはできません (SQLSTATE 42509)。
許可
SET INTEGRITY の実行に必要な特権は、 ステートメントの使用法によって以下のように異なります。
ステートメントの許可 ID の特権には、 少なくとも次のいずれかが含まれている必要があります。
ステートメントの許可 ID の特権には、 少なくとも次のいずれかが含まれている必要があります。
このステートメントの許可 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 つのタイプだけがオフの、 検査保留状態にすでになっている可能性がある点に注意してください。 そのような場合、他のタイプの保全性検査もオフになります。
リストに指定する表のいずれかが親表である場合、 外部キー制約に関する検査保留状態は、その従属表と子孫表のすべてに拡張されます。
リストに指定する表のいずれかが要約表の基礎表である場合、 検査保留状態はそのような要約表にも拡張されます。
検査保留状態にある表に対しては、極めて限定されたアクティビティーのみが許されます。 それらの制約は、注にリストされています。
このオプションを指定しても、従属表および下層表には影響がありません。
表が要約表であれば、データは必要に応じて照会で検査され、最新表示されます。
表が DRP または DRNP 状態であっても、DATALINK 値は検査されません。 DATALINK 値の調整を実行するには、RECONCILE コマンドまたは API を使用してください。 表は検査保留状態ではなくなりますが、DRP または DRNP フラグはセットされたままとなります。 これにより、DATALINK 値の調整をある時間まで据え置いておいて、 その間に表を使用することが可能になります。
表が検査保留状態にない場合、エラー (SQLSTATE 55019) が戻されます。
FOR EXCEPTION 文節の指定がない場合に、制約違反が生じると、 検出された最初の違反だけがユーザーに戻されます (SQLSTATE 23514)。 表のいずれかに違反がある場合、すべての表は、 ステートメント実行前と同じ検査保留状態のままになります。 table-name が要約表であれば、この文節は指定できません (SQLSTATE 42997)。
これは、次のようにして特定の表に指定します。ALL を指定する。 その表の検査制約だけがオフの場合には CHECK を指定する。 その表の外部キー制約だけがオフの場合には FOREIGN KEY を指定する。 その表の DATALINK 保全性制約だけがオフの場合には DATALINK RECONCILE PENDING を指定する。 その要約表の要約表照会検査だけがオフの場合には SUMMARY を指定する。 そしてその表に対する列の生成だけがオフの場合には GENERATED COLUMN を指定する。
これは、特定の表に対して、どのタイプの制約もオフの場合に、 CHECK、FOREIGN KEY、SUMMARY、GENERATED COLUMN、 または DATALINK RECONCILE PENDING だけを指定することによって指定されます。
状態の変更は、リストに明示的に含まれていない表には拡張されません。
従属表の親が検査保留状態である場合、 従属表の外部キー制約の検査を回避することはできません (検査制約の検査は回避できます)。
このオプションの使用に先立って、データ保全性に関連する影響について検討する必要があります。 注 を参照してください。
たとえば、検査保留状態にある従属表にカスケードする親表の行の DELETE は実行できません。
SET INTEGRITY ステートメントによる違反行の除去は、削除イベントではありません。 したがって、SET INTEGRITY ステートメントではトリガーは活動化されません。 同様に、FORCE GENERATED オプションを使用して生成された列を更新しても、トリガーは活動化されません。
据え置き状態の検査を行うことなく保全性検査がオンになったという事実は、 カタログに記録されます (SYSCAT.TABLES 視点の CONST_CHECKED 列の値が 'U' に設定されます)。 これは、特定の制約に関するデータ保全の責任はユーザーにあることを示しています。 この値は、以下のいずれかの時点までそのままになります。
'W' 状態は 'N' 状態と違って、 保全性が以前はシステムではなくユーザーによって検査されていた事実を記録します。 また、選択が与えられると、システムは表全体のデータ保全性を再検査し、 この状態を 'Y' 状態に変更します。 選択が与えられない場合 (たとえば、 IMMEDIATE UNCHECKED または INCREMENTAL を指定すると)、 システムによって検査されていないデータがいくつかあることを記録するため、 この状態を 'U' 状態に戻します。 後者 (INCREMENTAL) の場合、警告 (SQLSTATE 01636) が戻されます。
例
例 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