COBOL2002 ユーザーズガイド


21.6 明示的な例外の引き起こし

COBOL2002では,明示的に例外を引き起こせます。明示的に例外を引き起こすと,ユーザプログラムが固有に定めたエラー状態を利用者定義例外として発生させたり,ある例外種別で実行される宣言手続き処理に対してユーザプログラムから明示的に例外を発生させて実行できます。これによって,宣言手続き処理を共通化できます。

共通例外処理で明示的に例外を引き起こすには,RAISE文を使用します。RAISE文にレベル3の例外名またはオブジェクト参照の一意名を指定して実行すると,指定した例外が引き起こされます。

RAISE文に指定する例外が例外名の場合,該当するTURN指令のチェックがONでなくても,例外が引き起こされます。

また,RAISE文に例外名EC-I-Oに関連する例外を指定して実行する場合,入出力状態は変更されません。

このシステムでは,ファイル名指定の例外宣言手続きは,ファイル名指定のない例外宣言手続きとみなします。

そのため,同じ名称の例外名を指定した例外宣言手続きが複数個定義されている場合は,最後に定義した例外宣言手続きが実行されます。

RAISE文については,マニュアル「COBOL2002 言語 標準仕様編」 「10.8.32 RAISE文」を参照してください。

RAISE文に例外名を指定して実行した場合の例を,次に示します。

       IDENTIFICATION   DIVISION.
        PROGRAM-ID.      SAMPLE.
 
       >>TURN  EC-I-O  CHECKING  ON
       ENVIRONMENT      DIVISION.
        INPUT-OUTPUT     SECTION.
         FILE-CONTROL.
           SELECT  FILE1  ASSIGN  TO  'FILENAME.EXT'.
 
       DATA  DIVISION.
        FILE  SECTION.
           FD  FILE1.
            01  REC  PIC  X.
        WORKING-STORAGE  SECTION.
           77  FILESTATUS  PIC X(2)  VALUE  '00'.
 
       PROCEDURE        DIVISION.
        DECLARATIVES.
         IO-EXCEPTION-HANDLER1  SECTION.
           USE  AFTER  EXCEPTION  CONDITION  EC-I-O-AT-END FILE FILE1.  *> 2.
             DISPLAY  'GENERAL HANDLER '.
             CLOSE  FILE1.
             RESUME  AT  TERMINATION.
         IO-EXCEPTION-HANDLER2  SECTION.
           USE  AFTER  EXCEPTION  CONDITION  EC-I-O-AT-END.             *> 3.
             DISPLAY  'SPECIAL HANDLER FOR FILE1'.
             CLOSE  FILE1.
             RESUME  AT  TERMINATION.
        END DECLARATIVES.
           OPEN  INPUT  FILE1.
           RAISE EXCEPTION EC-I-O-AT-END.  *> 1.
           READ  FILE1.
        TERMINATION.
           IF FILESTATUS NOT = '00'
             DISPLAY 'RAISE FILESTATUS = ' FILESTATUS
           END-IF.
           STOP  RUN.
        END  PROGRAM     SAMPLE.
  1. RAISE文によって,例外EC-I-O-AT-ENDが引き起こされます。

  2. IO-EXCEPTION-HANDLER1では,指定されたファイル名は無視されて,例外名EC-I-O-AT-ENDに対応します。ただし,3.に例外名EC-I-O-AT-ENDに対応する例外宣言手続きがあるため,2.の例外宣言手続きに処理は移りません。

  3. IO-EXCEPTION-HANDLER2では,例外名EC-I-O-AT-ENDに対応します。2.の例外名EC-I-O-AT-ENDと同じ名称であるため,あとに指定された3.の例外名に対応する例外宣言手続きに処理が移り,DISPLAY文およびCLOSE文が実行されます。