索引キーや相対キーの障害のために入出力エラーが起こると、INVALID KEY 句で識別される命令ステートメントに制御が与えられます。 INVALID KEY 句は、索引ファイルや相対ファイルの READ、START、WRITE、REWRITE、および DELETE ステートメントに組み込めます。
INVALID KEY 句は、次の点で USE AFTER EXCEPTION/ERROR 宣言と異なります。
無効キー条件になる入出力ステートメントに INVALID KEY 句を指定すると、INVALID KEY 句で識別される命令ステートメントに制御が転送されます。 この場合、コーディングした USE AFTER EXCEPTION/ERROR 宣言部分は実行されません。
指定した NOT INVALID KEY 句は、ステートメントが正常に完了した場合に限り実行されます。 無効キー以外の条件で操作が失敗した場合、INVALID KEY 句と NOT INVALID KEY 句は両方とも実行されません。 その代わり、関連する USE AFTER EXCEPTION/ERROR 宣言部分が実行された後で、入出力ステートメントの最後に制御が渡されます。
状況キーを評価し、特定の無効キー条件を調べるには、INVALID KEY 句と一緒に FILE STATUS 文節を使用してください。
たとえば、得意先マスター・レコードを含むファイルがあり、トランザクション更新ファイル中の情報を使用してこのレコードの一部を更新する必要がある場合を考えてみます。 各トランザクション・レコードを読み取り、マスター・ファイル中で対応するレコードを検出し、必要な更新を行います。 2 つのファイルにはレコードごとに得意先番号のフィールドがあり、 マスター・ファイルにはレコードごとに固有の得意先番号があります。
通勤者 (COMMUTER) レコードのマスター・ファイルの FILE-CONTROL 項目には、索引付き編成およびランダム・アクセスを定義し、 基本レコード・キーとして MASTER-COMMUTER-NUMBER、またファイル状況キーとして COMMUTER-FILE-STATUS を定義するステートメントが含まれています。 次の例では、INVALID KEY 句と FILE STATUS 文節とを使用して、 入出力ステートメントのエラーの原因をより明確に判別する方法を示します。
. . (read the update transaction record) . MOVE "TRUE" TO TRANSACTION-MATCH MOVE UPDATE-COMMUTER-NUMBER TO MASTER-COMMUTER-NUMBER READ MASTER-COMMUTER-FILE INTO WS-CUSTOMER-RECORD INVALID KEY DISPLAY "MASTER CUSTOMER RECORD NOT FOUND" DISPLAY "FILE STATUS CODE IS: " COMMUTER-FILE-STATUS MOVE "FALSE" TO TRANSACTION-MATCH END-READ
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.