21.5.1 PROPAGATE指令による例外の自動伝播

PROPAGATE指令をONにすると,引き起こされた例外を自動的に呼び出し元プログラムへ伝播させられます。

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

PROPAGATE指令を使用した例外の伝播の例を,次に示します。

<主プログラム:SAMPLE1.CBL>

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
        :
      PROCEDURE DIVISION.
      DECLARATIVES.
      ERROR-HANDLER SECTION.
        USE  AFTER EXCEPTION CONDITION EC-BOUND-SUBSCRIPT. *> 4.
          :
      END DECLARATIVES.
      >>TURN EC-BOUND-SUBSCRIPT CHECKING ON

          CALL 'SAMPLE2'. *> 1.

      END PROGRAM SAMPLE1.

<副プログラム:SAMPLE2.CBL>

      >>PROPAGATE ON *> 3.
      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
        :
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 A.
        02 AA PIC 9 OCCURS 10 INDEXED BY B.
      01 C PIC 9.
        :
      PROCEDURE DIVISION.
          SET B DOWN BY 1.
      >>TURN EC-BOUND-SUBSCRIPT CHECKING ON
          MOVE AA ( B ) TO C. *> 2.
      END PROGRAM SAMPLE2.

  1. プログラム「SAMPLE1」中のCALL文で,プログラム「SAMPLE2」を呼び出します。
  2. プログラム「SAMPLE2」中のMOVE文で,例外が検出されます(例外名:EC-BOUND-SUBSCRIPT)。
  3. PROPAGATE指令がONなので,呼び出し元のCALL文に例外が伝播します。
  4. 例外の伝播によってCALL文で例外が検出され,例外が引き起こされます。これによって,例外名EC-BOUND-SUBSCRIPTを指定したUSE手続きへ制御が移ります。
注意事項
  • PROPAGATE ONが指定されたプログラムをCOBOL主プログラムとした場合,例外が引き起こされても例外は伝播されないで,COBOLプログラムが正常終了します。
  • 自動伝播される例外は,例外の致命度が致命的なものだけです。致命度が非致命的な例外の場合,自動伝播されないで例外を引き起こした文の次の文が実行されます。