ファイル状況キーによるエラーのタイプの判別

ファイル状況キーの更新は、ファイルに対する個々の入出力操作の後で、2 桁のファイル状況キーに値を入れることによって行われます。 通常は、先頭桁がゼロの場合は操作が成功したことを示し、2 桁ともゼロの場合は「異常が報告されなかった」ことを意味します。

FILE-CONTROL 項目を使用することにより、ILE COBOL プログラムで使用する各ファイルの編成とアクセス方式を指定しなければなりません。 また、この項目には FILE STATUS 文節もコーディングできます。

FILE STATUS 文節は、入出力操作の結果のコピーを入れるための 1 つまたは 2 つのデータ項目 (WORKING-STORAGE セクションにコーディングされているもの) を指定します。 1 つ目の項目のコピーは外部ファイル状況と呼ばれます。 TRANSACTION ファイルを使用する場合は、もう 1 つの結果レコードがあります。これは外部戻りコードと呼ばれ、 外部メジャー戻りコードと外部マイナー戻りコードとで構成されます。

ILE COBOL は、これら 2 つのデータ項目に対応する情報を ILE COBOL ファイル・フィールド記述子 (FFD) に保持します。 ILE COBOL のこれら 2 つのデータ項目のコピーは、それぞれ内部ファイル状況と内部戻りコードと呼ばれます。 この章では、ファイル状況、および (メジャー / マイナー) 戻りコード は 、特に指定がない限り ILE COBOL のコピーのことです。

入出力ステートメントの処理中に、次の 3 つの方法のどれかでファイル状況を更新できます。 ファイル状況の内容によって、エラー処理プロシージャーを実行するかどうかが判別されます。

エラー処理プロシージャーは、入出力操作が失敗した後に制御を握ります。 これはゼロ以外のファイル状況で示されます。 これらのプロシージャーが実行される前に、ファイル状況は外部ファイル状況にコピーされます。

ファイル状況は次の 3 つの方法のいずれかで設定されます。

 HOW FILE STATUS IS SET 0100
 .---.
 '001'
 '---'
 - Start the I/O operation.
 - Reset the internal file status.
 - Method A: Check the contents of the variables in the file control blocks.
   (Check, for example, that the file has been opened properly.)
 ARE THE VARIABLES IN THE FILE CONTROL BLOCKS SET AS EXPECTED?
 YES  NO
  '    '
  '   .'--.
  '   '002'
  '   '---'
  '   - Set internal file status to indicate that an error has occurred.
  '   - Continue at -- Step 'INT2EXT' unknown --
 .'--.
 '003'
 '---'
 - Call on data management to perform the I/O operation.
 DOES DATA MANAGEMENT RETURN AN EXCEPTION?
 YES  NO
  '    '
  '   .'--.
  '   '004'
  '   '---'
  '   - Method A: Check the contents of the variables in the file control blocks.
  '   ARE THE VARIABLES IN THE FILE CONTROL BLOCKS SET AS EXPECTED?
  '   YES  NO
  '    '    '
  '    '   .'--.
  '    '   '005'
  '    '   '---'
  '    '   - Set internal file status to indicate that an error has occurred.
  '    '   - Continue at -- Step 'INT2EXT' unknown --
  '    '
  '   .'--.
  '   '006'
  '   '---'
  '   - Move internal file status to external file status (specified in file
  '     status clause).
  '   - Based on internal file status, run the error handling code.
  '  ----------------------------------------------------------------------------
 .'--.
 '007'
 '---'
 IS THE FILE A TRANSACTION FILE?
 YES  NO
  '    '
  '   .'--.
  '   '008'
  '   '---'
  '   - Method C: Set the internal file status according to the CPF message sent
  '     by data management.
  '   - Continue at Step 004
 .'--.
 '009'
 '---'
 ARE MAJOR AND MINOR RETURN CODES AVAILABLE FROM THE SYSTEM?
 YES  NO
  '    '
  '   .'--.
  '   '010'
  '   '---'
  '   - Method C: Set the internal file status according to the CPF message sent
  '     by data management.
  '   - Continue at Step 004
 .'--.
 '011'
 '---'
 - Method B: Set the internal file status based on the major and minor return
   codes available from the system.
 - Continue at Step 004
 --------------------------------------------------------------------------------
 

メジャー戻りコードとマイナー戻りコードの解釈

プログラム中に TRANSACTION ファイルを指定すると、SELECT ステートメントの FILE STATUS 文節に、 外部ファイル状況と、外部 (メジャーおよびマイナー) 戻りコードの 2 つのデータ名を含めることができます。 ファイル状況キーによるエラーのタイプの判別に示されているように、ファイル状況は、3 つの方法のいずれかで設定できます。 しかし、トランザクション入出力によりデータ管理が呼び出された後は、システムによって戻りコードが設定されます。 その結果、システム・メッセージが出されるほとんどのエラー状態にも、戻りコードが対応しています。

戻りコードはファイル状況値と似ています。 すなわち、システムから送られる CPF メッセージは、ILE COBOL 実行時例外ハンドラーによってグループにまとめられ、CPF メッセージの各グループを使用して 1 つまたは複数のファイル状況が設定されます。 同様に、各メジャー戻りコードも、CPF メッセージのグループによって生成されます。 (マイナー戻りコードは必ずしも同じではありません。) ファイル状況と戻りコードの主な違いは、CPF メッセージのグループ化に関する違いです。

ILE COBOL は TRANSACTION ファイルの戻りコードだけを設定しますが、他のタイプのファイル (印刷出力ファイルなど) も戻りコードは設定されます。 それらのファイルの戻りコードには、I-O-FEEDBACK 操作から ACCEPT を使用してアクセスします。

異常事態処理ルーチンによるメッセージ処理

異常事態処理ルーチンは、システムか他の ILE プロシージャーまたはプログラム・オブジェクトから送られるメッセージを、ILE プロシージャーまたはプログラム・オブジェクトで処理するための手段を提供します。 1 つの異常事態処理ルーチンで 1 つまたは複数のメッセージを処理できます。

異常事態処理ルーチンはある点で USE プロシージャーに似ています。 USE プロシージャーが入出力エラーに応じて行うアクションを指定する方法と同様の方法で、 異常事態処理ルーチンはマシン・インターフェース (MI) 命令の処理中にエラーが発生した際に行うアクションを指定します。 MI 命令エラーはシステム・メッセージによって通知され、各 ILE COBOL ステートメントは 1 つまたは複数の MI 命令で構成されます。

異常事態処理ルーチンには次の 2 つのタイプがあります。