21.7.1 組み込み関数を使用した例外情報の参照

次の組み込み関数を使用すると,実行単位で最後に引き起こされた例外(最新例外状態)の詳細な情報を取得できます。

<この項の構成>
(1) EXCEPTION-FILE関数
(2) EXCEPTION-LOCATION関数
(3) EXCEPTION-STATEMENT関数
(4) EXCEPTION-STATUS関数
(5) 使用例
(6) 注意事項

(1) EXCEPTION-FILE関数

最新例外状態に関連するファイル結合子の入出力状態の値,およびファイル名称を返します。関数の戻り値の長さは,64バイトです。

EXCEPTION-FILE関数の戻り値を,次に示します。

例外の種類関数の戻り値の内容
入出力に関連する例外の場合※1入出力状態とファイル名
入出力以外の例外の場合※200
注※1
入出力に関連する例外(例外名EC-I-Oに関連する例外)であっても,例外名EC-I-O-LINAGE,EC-I-O-EOP,またはEC-I-O-EOP-OVERFLOWの場合は,入出力状態が00となります。
注※2
入出力以外の例外の場合とは,次の状態を指します。
  • 例外が検出されていない状態
  • RAISE文で,例外名EC-I-Oに関連する例外を指定して実行した場合
  • 例外名EC-I-O以外の例外が引き起こされている状態

EXCEPTION-FILE関数については,マニュアル「COBOL2002 言語 標準仕様編 11.18 EXCEPTION-FILE関数」を参照してください。

(2) EXCEPTION-LOCATION関数

最新例外状態に関連する文の位置を返します。関数の戻り値の長さは,303バイトです。

EXCEPTION-LOCATION関数の戻り値は,プログラム/利用者定義関数/メソッドの名称,手続き名,およびソース行識別子から構成され,それぞれがセミコロン(;)と空白1文字で区切られた形式となっています。

EXCEPTION-LOCATION関数の戻り値を,次に示します。

例外の有無関数の戻り値の内容
例外あり
  • プログラム/利用者定義関数/メソッドの名称
  • 手続き名
  • ソース行識別子
例外なし英数字空白
例外ありの場合の形式

AAA…AA;△BB…B;△CCCCCCC/CCC

AAA…AA
プログラム/利用者定義関数/メソッドの名称
BB…B
手続き名
CCCCCCC/CCC
ソース行識別子
半角空白文字を示します。
 
それぞれの項目に返される値を,次に示します。
プログラム/利用者定義関数/メソッド
プログラム/利用者定義関数/メソッド名称として返される値について,次に示します。
例外の引き起こされた位置を
含む定義の種別
関数の戻り値の内容
プログラムプログラム名
利用者定義関数利用者定義関数名
メソッドメソッド名
手続き名
手続き名として返される値について,次に示します。
手続き名は,例外が発生した文の段落名,節名の有無によって出力内容が異なります。
手続きの種別関数の戻り値の内容
段落名,節名あり段落名 OF 節名
段落名だけあり段落名
節名だけあり節名
段落名,節名なし何も戻さない
注※
-Optimize,2オプションの指定によって,そとPERFORM文のインライン展開が処理された場合,インライン展開によって段落名および手続き文が移動されます。このため,インライン展開された個所で例外が発生したとき,インライン展開されていない場合に返される手続き名の値と相違があります。
そとPERFORM文のインライン展開がされなかった個所(COMPUTE文)で例外が発生した場合に返される手続き名の相違の例を,次に示します。
インライン展開前の形式インライン展開後の形式

AAA SECTION.
   PERFORM XXX.
   STOP RUN.
BBB SECTION.
XXX.
   COMPUTE A = B + 1.
CCC SECTION.
   COMPUTE A = B + 2.

AAA SECTION.
XXX.
   COMPUTE A = B + 1.
   STOP RUN.
BBB SECTION.
CCC SECTION.
   COMPUTE A = B +  2.

返される手続き名
 XXX△OF△BBB
返される手続き名
 XXX△OF△AAA

(凡例) △:空白(X'20')


ソース行識別子
ソース行識別子として返される値について,次に示します。
このシステムでのソース行識別子は,例外が発生した文の行番号7けたと欄番号3けたの間に/を追加したものとなります。なお,行番号が7けたを超える場合,または欄番号が3けたを超える場合,各最大けたを超える上位けたについては,けた落ちが発生します。

 

EXCEPTION-LOCATION関数については,マニュアル「COBOL2002 言語 標準仕様編 11.19 EXCEPTION-LOCATION関数」を参照してください。

(3) EXCEPTION-STATEMENT関数

例外が引き起こされた文の名前を返します。関数の戻り値の長さは,31バイトです。

EXCEPTION-STATEMENT関数の戻り値を,次に示します。

例外の有無関数の戻り値の内容
例外あり例外の発生した文の名前
例外なし英数字空白31文字

EXCEPTION-STATEMENT関数については,マニュアル「COBOL2002 言語 標準仕様編 11.20 EXCEPTION-STATEMENT関数」を参照してください。

(4) EXCEPTION-STATUS関数

最新例外状態に関連する例外名称を返します。関数の戻り値の長さは,31バイトです。

EXCEPTION-STATUS関数の戻り値を,次に示します。

引き起こされた例外の種別関数の戻り値の内容
例外名例外名
例外オブジェクトEXCEPTION-OBJECT
例外なし英数字空白31文字

EXCEPTION-STATUS関数については,マニュアル「COBOL2002 言語 標準仕様編 11.21 EXCEPTION-STATUS関数」を参照してください。

(5) 使用例

組み込み関数を使用して最新例外状態を参照するCOBOLプログラムの例を,次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE.
          :
      ENVIRONMENT DIVISION.
      INPUT-OUTPUT SECTION.
      FILE-CONTROL.
      SELECT INFILE  ASSIGN 'INPUT-FILE'.
      SELECT OUTFILE ASSIGN 'OUTPUT-FILE'.
          :
      DATA DIVISION.
      FILE SECTION.
      FD INFILE.
      01 INREC   PIC X(10).
      FD OUTFILE.
      01 OUTREC  PIC X(10).
      WORKING-STORAGE SECTION.
      01 EOF-FLG PIC 9 VALUE 0.
          :
      PROCEDURE DIVISION.
      DECLARATIVES.
      EXCEPTION-HANDLING SECTION.
          USE AFTER EXCEPTION CONDITION EC-I-O.  *> 2.
            DISPLAY FUNCTION EXCEPTION-FILE.
            DISPLAY FUNCTION EXCEPTION-LOCATION.
            DISPLAY FUNCTION EXCEPTION-STATEMENT.
            DISPLAY FUNCTION EXCEPTION-STATUS.
            IF FUNCTION EXCEPTION-STATEMENT = 'OPEN' THEN
              IF FUNCTION EXCEPTION-FILE (3  :  ) = 'OUTFILE' THEN
                RESUME AT ERROR-HANDLE2
              END-IF
              RESUME AT ERROR-HANDLE3
            END-IF.
            RESUME AT ERROR-HANDLE1.
      END DECLARATIVES.

      >>TURN EC-I-O CHECKING ON
          OPEN INPUT  INFILE. *> 1.
          OPEN OUTPUT OUTFILE.
          PERFORM UNTIL EOF-FLG = 1
            READ INFILE
            WRITE OUTREC FROM INREC
          END-PERFORM.
      ERROR-HANDLE1.
          CLOSE OUTFILE.
      ERROR-HANDLE2.
          CLOSE INFILE.
      ERROR-HANDLE3. *> 3.
          STOP RUN.
      END PROGRAM 'SAMPLE'.

  1. 物理ファイル「INPUT-FILE」がない場合,OPEN文で永続誤りが発生し,最新例外状態が更新されます。
  2. 例外に該当する例外宣言手続きが実行されます。この手続き中で組み込み関数を使用すれば,例外の情報を参照できます。この例では,次の例外情報が組み込み関数の戻り値として取得されます。
    組み込み関数名関数の戻り値
    EXCEPTION-FILE35INFILE
    EXCEPTION-LOCATIONSAMPLE;△;△0000035​/011
    EXCEPTION-STATEMENTOPEN
    EXCEPTION-STATUSEC-I-O-PERMANENT-ERROR
    (凡例)
    △:半角空白文字を示す
    注※
    例外が発生したOPEN文の行番号が35,欄番号が11の場合です。

  3. 例外宣言手続き中のIF文の判定によって,RESUME ERROR-HANDLE3が実行され,手続きERROR-HANDLE3に復帰します。

(6) 注意事項