COBOL2002 ユーザーズガイド
実行される宣言手続きは,引き起こされた例外と,USE文に指定した例外によって決定します。実行される宣言手続きの詳細については,マニュアル「COBOL2002 言語 標準仕様編 10.8.53 USE文」を参照してください。
引き起こされた例外に対して宣言手続きを複数記述した場合,レベル3,レベル2,レベル1の順に検索され,宣言手続きが一つだけ実行されます。
次の例では,引き起こされた例外の例外名EC-SIZE-ZERO-DIVIDEに対して,実行される宣言手続きがEXCEPTIONHANDLER1(例外名EC-SIZEに該当)とEXCEPTIONHANDLER2(例外名EC-SIZE-ZERO-DIVIDEに該当)の2種類があります。この場合,レベル2の例外よりもレベル3の例外が優先されるため,EXCEPTIONHANDLER1は実行されないで,EXCEPTIONHANDLER2が実行されます。
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE. >>TURN EC-SIZE CHECKING ON DATA DIVISION. WORKING-STORAGE SECTION. 01 A PIC 9. 01 B PIC 9 VALUE 0. 01 C PIC 9. PROCEDURE DIVISION. DECLARATIVES. EXCEPTION-HANDLER1 SECTION. USE AFTER EXCEPTION CONDITION EC-SIZE. *> 2. DISPLAY 'EC-SIZE'. EXCEPTION-HANDLER2 SECTION. USE AFTER EXCEPTION CONDITION EC-SIZE-ZERO-DIVIDE. *> 3. DISPLAY FUNCTION EXCEPTION-STATUS. END DECLARATIVES. DIVIDE A BY B GIVING C. *> 1. END PROGRAM SAMPLE.
なお,例外名が「EC-I-O-」ではじまる入出力例外は,ファイル名を指定する形式とファイル名を指定しない形式の2種類が指定できますが,両方の形式の例外宣言手続きを指定した場合,ファイル名を指定する形式の方が優先されます。
次の例では,FILE1のREAD文で例外が引き起こされると,IO-EXCEPTION-HANDLER2の方が実行されます。
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE. >>TURN EC-I-O CHECKING ON ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT FILE1 ASSIGN TO 'FILENAME.TXT'. DATA DIVISION. FILE SECTION. FD FILE1. 01 REC PIC X. WORKING-STORAGE SECTION. 77 FILESTATUS PIC X(2). 77 LOOP-EXIT-FLAG PIC 9 VALUE 0. PROCEDURE DIVISION. DECLARATIVES. IO-EXCEPTION-HANDLER1 SECTION. USE AFTER EXCEPTION CONDITION EC-I-O-AT-END. *> 2. DISPLAY 'GENERAL HANDLER' RESUME AT TERMINATION. IO-EXCEPTION-HANDLER2 SECTION. USE AFTER EXCEPTION CONDITION EC-I-O-AT-END FILE FILE1. *> 3. DISPLAY 'SPECIAL HANDLER FOR FILE1' CLOSE FILE1 RESUME AT TERMINATION. END DECLARATIVES. OPEN INPUT FILE1 PERFORM UNTIL LOOP-EXIT-FLAG = 1 READ FILE1 *> 1. IF FILESTATUS NOT = '00' AND '10' THEN MOVE 1 TO LOOP-EXIT-FLAG DISPLAY 'READ FILESTATUS = ' FILESTATUS END-IF END-PERFORM. TERMINATION. STOP RUN. END PROGRAM SAMPLE.
宣言手続きからの復帰が行われない場合,例外の致命度によって,次の処理が実行されます。宣言手続きからの復帰については,「22.4.2 宣言手続きからの復帰」を参照してください。
例外名EC-FLOW-USEに対して実行される宣言手続きを,再帰的に実行するような処理にしないでください。このような処理にすると,無限ループが発生します。
All Rights Reserved. Copyright (C) 2013, 2016, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2002, 2011, Microsoft Corporation.