無効キー条件の検出 (INVALID KEY 句)

索引キーや相対キーの障害のために入出力エラーが起こると、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