プログラムの実行時に入力または出力エラーが発生した場合に制御が与えられる 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 つのスレッドで実行している場合、次の一連のイベントが発生するおそれがあります。
関連参照
EXCEPTION/ERROR 宣言 (Enterprise COBOL 言語解説書)