21.9.2 従来形式の例外処理と共通例外処理の関係
- 〈この項の構成〉
(1) 従来形式の例外処理を実行する場合の最新例外状態の更新
従来形式の例外処理を実行する場合,検出した例外に対する例外名のTURN指令のチェックがONであれば,最新例外状態が更新されます。ただし,従来形式の例外処理のうちON SIZE ERROR指定については,ON SIZE ERRORを実行する際に例外が検出されないため,TURN指令のチェックがONであっても最新例外状態は更新されません。従来形式の例外処理を実行する場合に,最新例外状態が更新される例外処理と,更新されない例外処理を,次に示します。
- 最新例外状態が更新される従来形式の例外処理
-
-
従来形式の宣言手続き
-
READ文,SEARCH文のAT END指定
-
WRITE文のAT EOP指定
-
WRITE文,REWRITE文,DELETE文,START文のINVALID KEY指定
-
CALL文のON OVERFLOW,ON EXCEPTION指定
-
STRING文,UNSTRING文のON OVERFLOW指定
-
- 最新例外状態が更新されない従来形式の例外処理
-
-
ADD文,SUBTRACT文,MULTIPLY文,DIVIDE文,COMPUTE文のON SIZE ERROR指定
-
(2) 従来形式の宣言手続きと共通例外処理の宣言手続きの優先順序
従来形式の宣言手続きと共通例外処理の宣言手続きを同時に指定した場合,従来形式の宣言手続きが優先して実行されます。ただし,例外を検出したプログラムが入れ子のプログラムで,上位プログラムにGLOBAL句を指定した従来形式の宣言手続きが定義されているときは,入れ子のプログラム中の共通例外処理の宣言手続きが優先して実行されます。
従来形式の宣言手続きが優先される例を,次に示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INFILE ASSIGN 'INPUT-FILE'.
DATA DIVISION.
FILE SECTION.
FD INFILE.
01 INREC PIC X(10).
WORKING-STORAGE SECTION.
01 READDATA PIC X(10).
PROCEDURE DIVISION.
DECLARATIVES.
EXCEPTION-HANDLE1 SECTION.
USE AFTER STANDARD EXCEPTION PROCEDURE INFILE. *> 2.
DISPLAY '従来形式USE実行'.
EXCEPTION-HANDLE2 SECTION.
USE AFTER EXCEPTION CONDITION EC-I-O. *> 3.
DISPLAY '共通例外処理USE実行'.
END DECLARATIVES.
>>TURN EC-I-O CHECKING ON
OPEN INPUT INFILE.
READ INFILE INTO READDATA. *> 1.
DISPLAY READDATA.
CLOSE INFILE.
END PROGRAM SAMPLE.上記の例の場合,プログラム中のREAD文(1.)によって例外が引き起こされた場合,従来形式の宣言手続き(2.)が共通例外処理(3.)より優先して実行されます。
(3) FILE STATUS句の指定と共通例外処理での異常終了
COBOL85では,入出力エラーが発生した場合にFILE STATUS句の指定があると実行を継続しますが,COBOL2002では,FILE STATUS句より共通例外処理が優先されます。そのため,入出力エラーが発生して共通例外処理が実行された場合,FILE STATUS句の指定があっても実行が継続されません。
FILE STATUS句の指定の有無と共通例外処理の関係を,次に示します。
|
発生した入出力エラーに対応するTURN指令の状態 |
入出力エラーに対応するUSE文 |
FILE STATUS句の有無 |
入出力エラー発生時の動作 |
|---|---|---|---|
|
ON |
なし |
○ |
実行時エラー※ |
|
× |
実行時エラー※ |
||
|
新形式 |
○ |
新形式のUSE文を実行 |
|
|
× |
新形式のUSE文を実行 |
||
|
従来形式 |
○ |
従来形式のUSE文を実行 |
|
|
× |
従来形式のUSE文を実行 |
||
|
新形式 従来形式 |
○ |
従来形式のUSE文を実行 |
|
|
× |
従来形式のUSE文を実行 |
||
|
OFF |
なし |
○ |
実行を継続 |
|
× |
実行時エラー※ |
||
|
新形式 |
○ |
実行を継続 |
|
|
× |
実行時エラー※ |
||
|
従来形式 |
○ |
従来形式のUSE文を実行 |
|
|
× |
従来形式のUSE文を実行 |
||
|
新形式 従来形式 |
○ |
従来形式のUSE文を実行 |
|
|
× |
従来形式のUSE文を実行 |
- (凡例)
-
ON:入出力エラーに対応するTURN指令のチェックがON
OFF:入出力エラーに対応するTURN指令のチェックがOFF
なし:入出力エラーに対応するUSE文がない
新形式:入出力エラーに対応するCOBOL2002形式のUSE文がある
従来形式:入出力エラーに対応する従来のCOBOL形式のUSE文がある
○:FILE STATUS句が指定されている
×:FILE STATUS句が指定されていない
- 注※
-
発生した入出力エラーが非致命的な場合,実行時エラーとはならないで,実行が継続されます。