Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 プログラミング・ガイド


ERROR 宣言のコーディング

プログラムの実行時に入力または出力エラーが発生した場合に制御が与えられる ERROR 宣言型プロシージャーを 1 つ以上コーディングすることができます。 そのようなプロシージャーをコーディングしないと、入出力エラーの発生後、ジョブが取り消されるか、異常終了します。

このようなプロシージャーをそれぞれ PROCEDURE DIVISION の宣言セクションに入れます。以下のものをコーディングすることができます。

ERROR 宣言プロシージャーでは、訂正処置の試行、操作の再試行、実行の継続または終了などをコーディングすることができます。 (ただし、ブロック化ファイルの処理を継続する場合、エラーが発生したレコードより後ろにあるブロック内の残りのレコードが失われることがあります。) エラーについてさらに詳しい分析を行う場合は、ERROR 宣言型プロシージャーとファイル状況キーを組み合わせて使用することができます。

マルチスレッド化: マルチスレッドのアプリケーションで入出力宣言をコーディングするときは、デッドロックを避けます。 入出力操作の結果として制御が入出力宣言に移動した場合、その宣言内のステートメントが実行されている間は、そのファイルと関連付けられた自動逐次化ロックが保持されます。宣言内に入出力操作をコーディングすると、ロジックは以下のサンプルに示すデッドロックに陥ることがあります。

Declaratives.
D1 section.
Use after standard error procedure on F1
    Read F2.
    . . .
D2 section.
Use after standard error procedure on F2
    Read F1.
    . . .
End declaratives.
    . . .
    Rewrite R1.
    Rewrite R2.

このプログラムを 2 つのスレッドで実行している場合、次の一連のイベントが発生するおそれがあります。

  1. スレッド 1: 再書き込み R1 が F1 に対するロックを獲得し、入出力エラーが発生する。
  2. スレッド 1: F1 に対するロックを保持したまま、宣言 D1 に入る。
  3. スレッド 2: 再書き込み R2 が F2 に対するロックを獲得し、入出力エラーが発生する。
  4. スレッド 2: 宣言 D2 に入る。
  5. スレッド 1: 宣言 D1 から F2 を読み取り、スレッド 2 によって保持されている F2 のロックに対し待機する。
  6. スレッド 2: 宣言 D2 から F1 を読み取り、スレッド 1 によって保持されている F1 ロックに対し待機する。
  7. デッドロック。

関連参照
EXCEPTION/ERROR 宣言 (Enterprise COBOL 言語解説書)


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)