21.2.1 例外名

例外名とは,おのおのの例外に関連づけられた名前のことです。例えば,「0による除算」の例外は,例外名「EC-SIZE-ZERO-DIVIDE」として識別されます。

<この項の構成>
(1) 例外名のレベル
(2) 例外名の一覧
(3) 利用者定義例外名

(1) 例外名のレベル

例外名には,次の三つのレベルがあります。

レベル3
最下位のレベルに位置する例外名です。
レベル3に分類される例外名は,おのおのの例外を表します。
レベル2
レベル3の上位に位置する例外名です。
レベル2に分類される例外名は,レベル3例外名を機能や分類によってまとめたものです。機能・分類単位の例外を包括して指定したい場合に使用します。
レベル1
最上位に位置する例外名です。
レベル1に分類される例外名は,「EC-ALL」だけです。「EC-ALL」を指定すると,すべての例外名を指定したのと同じように処理されます。
すべての例外を包括して指定したい場合に使用します。

図21-2 例外名のレベル構成

[図データ]

(2) 例外名の一覧

例外名の一覧を,次に示します。

表21-2 例外名の一覧

例外名致命度説明検出される文
EC-ALLすべての例外
EC-ARGUMENT引数エラー
EC-ARGUMENT-FUNCTION致命的関数で引数エラーが発生した組み込み関数を指定できる手続き文※1
EC-ARGUMENT-IMP致命的組み込み関数の処理中にメモリ不足などのエラーが発生した組み込み関数を指定できる手続き文※1
EC-BOUND区域外
EC-BOUND-ODO致命的OCCURS~DEPENDING ONデータ項目が区域外である※2OCCURS DEPENDING ON一意名に値を設定する手続き文※1
EC-BOUND-REF-MOD致命的区域外の部分参照子である※3部分参照を指定できる手続き文※1
EC-BOUND-SUBSCRIPT致命的区域外の添字である※4添字を指定できる手続き文※1
EC-DATAデータ例外
EC-DATA-PTR-NULL致命的アドレス名によって参照されるデータ項目を参照するとき,アドレス名の設定値がNULLであるアドレス名によって参照されるデータ項目を指定した手続き文※5
EC-FLOW実行制御フロー違反
EC-FLOW-GLOBAL-EXIT致命的大域的な宣言手続き中でEXIT PROGRAM文が実行されたEXIT文
EC-FLOW-GLOBAL-GOBACK致命的大域的な宣言手続き中でGOBACK文が実行された
  • GOBACK文
  • 大域的な宣言手続き中での自動伝播の対象となる例外を引き起こした手続き文
EC-FLOW-IMP致命的ALTER文で行き先を指定する前に,行き先を省略したGO TO文が実行されたGO TO文
EC-FLOW-RELEASE致命的RELEASE文がSORT文の範囲内にないRELEASE文
EC-FLOW-RETURN致命的RETURN文がMERGE文やSORT文の範囲内にないRETURN文
EC-FLOW-USE致命的USE文が別のUSE手続きを実行させた宣言手続き中で実行中の宣言手続きを実行する例外を引き起こした手続き文
EC-I-O入出力例外
EC-I-O-AT-END非致命的入出力状態「1x」が発生したREAD文
EC-I-O-EOP非致命的ページ終了条件が発生したWRITE文
EC-I-O-EOP-OVERFLOW非致命的ページあふれ条件が発生したWRITE文
EC-I-O-IMP致命的入出力状態「9x」が発生した(入出力状態の詳細は,「付録F 入出力状態の値」を参照)
  • OPEN文
  • CLOSE文
  • READ文
  • WRITE文
  • REWRITE文
  • DELETE文
  • START文
EC-I-O-INVALID-KEY非致命的入出力状態「2x」が発生した
  • READ文
  • REWRITE文
  • START文
  • WRITE文
  • DELETE文
EC-I-O-LINAGE致命的LINAGE句に指定したデータ名の値が要求範囲外である
  • WRITE文
  • OPEN文
EC-I-O-LOGIC-ERROR致命的入出力状態「4x」が発生した
  • READ文
  • CLOSE文
  • REWRITE文
  • DELETE文
  • START文
  • OPEN文
  • WRITE文
EC-I-O-PERMANENT-ERROR致命的入出力状態「3x」が発生した
  • READ文
  • OPEN文
  • WRITE文
  • REWRITE文
  • DELETE文
EC-OOオブジェクト指向に関連するすべての既定義例外
EC-OO-CONFORMANCE致命的オブジェクトビューに対する不成功が発生したオブジェクトビューを指定できる手続き文
EC-OO-EXCEPTION致命的例外オブジェクトが処理されなかった
  • EXIT文
  • GOBACK文
EC-OO-IMP致命的INVOKE文の一意名1に指定されたハンドルの値が正しくないINVOKE文
EC-OO-METHOD致命的要求されるメソッドが使用できないINVOKE文
EC-OO-NULL致命的NULLオブジェクト参照を使用してメソッドを呼び起こそうとしたINVOKE文
EC-OO-RESOURCE致命的オブジェクトの作成や拡張に必要なシステム資源が不十分であるINVOKE文
EC-OO-UNIVERSAL致命的実行時の型チェックが失敗したINVOKE文
EC-OVERFLOWけたあふれ条件
EC-OVERFLOW-STRING非致命的STRING文のけたあふれ条件が発生したSTRING文
EC-OVERFLOW-UNSTRING非致命的UNSTRING文のけたあふれ条件が発生したUNSTRING文
EC-PROGRAMプログラム間連絡例外
EC-PROGRAM-ARG-MISMATCH致命的引数が不一致であるCALL文
EC-PROGRAM-CANCEL-ACTIVE致命的取り消されるプログラムが活性状態であるCANCEL文
EC-PROGRAM-IMP致命的
  • 共用ライブラリをロード中にエラーが発生した
  • CALL文で実行可能ファイルの処理中にエラーが発生した
  • EXTERNAL句を指定したデータ項目やファイル定義を処理中にエラーが発生した
  • CALL文
  • 利用者定義関数を指定できる手続き文
EC-PROGRAM-NOT-FOUND致命的呼び出し先プログラムが見つからないCALL文
EC-PROGRAM-RECURSIVE-CALL致命的呼び出し先プログラムが活性状態であるCALL文
EC-PROGRAM-RESOURCES致命的呼び出し先プログラムで資源が使用できない
  • CALL文
  • 利用者定義関数を指定できる手続き文
EC-RAISINGEXIT文RAISING指定かGOBACK文RAISING指定で発生する例外
EC-RAISING-NOT-SPECIFIED致命的EXIT文RAISING指定かGOBACK文RAISING指定のEC-USER例外条件が手続き部見出しのRAISING指定にない
  • EXIT文
  • GOBACK文
EC-RANGE範囲例外
EC-RANGE-INSPECT-SIZE致命的INSPECT文での置き換え項目のサイズが異なるINSPECT文
EC-RANGE-INVALID非致命的THROUGH範囲の開始値が終了値よりも大きい
  • EVALUATE文
  • 条件名指定のIF文
EC-RANGE-PERFORM-VARYING致命的PERFORM文で変更項目の設定が負値であるPERFORM文
EC-RANGE-SEARCH-INDEX非致命的指標の初期値が範囲外のため,SEARCH文で表要素が見つからないSEARCH文
EC-RANGE-SEARCH-NO-MATCH非致命的探索基準に合致する要素がないため,SEARCH文で表要素が見つからないSEARCH文
EC-SIZEけたあふれ例外
EC-SIZE-EXPONENTIATION致命的べき乗演算規則の違反が発生したCOMPUTE文
EC-SIZE-OVERFLOW致命的計算でのけたあふれが発生した
  • ADD文
  • COMPUTE文
  • MULTIPLY文
  • DIVIDE文
  • SUBTRACT文
EC-SIZE-TRUNCATION致命的格納での有効けた切り捨てが発生した
  • MOVE文
  • COMPUTE文
  • ADD文
  • SUBTRACT文
  • DIVIDE文
  • MULTIPLY文
EC-SIZE-UNDERFLOW致命的浮動小数点での下位けたあふれが発生した
  • ADD文
  • COMPUTE文
  • MULTIPLY文
  • DIVIDE文
  • SUBTRACT文
EC-SIZE-ZERO-DIVIDE致命的ゼロによる除算が発生した
  • COMPUTE文
  • DIVIDE文
EC-SORT-MERGE整列併合機能の例外
EC-SORT-MERGE-IMP致命的整列併合用ファイル記述項のRECORD句で指定したDEPENDING ONデータ名の値が数字ではない
  • RELEASE文
  • RETURN文
EC-SORT-MERGE-RELEASE致命的RELEASE文のレコードが長過ぎるまたは短過ぎるRELEASE文
EC-SORT-MERGE-RETURN致命的RETURN文がファイル終了条件発生中に実行されたRETURN文
EC-USER利用者定義の例外
EC-USER-(ユーザ定義例外名)非致命的レベル3の利用者定義の例外条件
  • RAISE文
  • EXIT文
  • GOBACK文
(凡例)
-:発生したレベル3の例外名の動作に従う

注※1
詳細は「21.8.1 例外が検出される文の詳細」を参照してください。
注※2
表操作で,DEPENDING ON指定のデータ名に格納されている繰り返し回数が,表の最小から最大の範囲にないことを示します。
注※3
部分参照の指定が,一意名の範囲内にないことを示します。
注※4
表操作で使用する添字または指標名が指す表要素が,表の範囲内にないことを示します。
注※5
ただし,連絡節中のデータ項目に対するポインタ変数がNULLである場合,例外が検出されません。
(例)
連絡節中のデータ項目に対してSET文のADDRESS OFによってNULLを設定したあと,そのデータ項目を参照した場合は,例外が検出されません。

(3) 利用者定義例外名

利用者定義例外名とは,ユーザが独自の例外を定義して使用できる機能です。

利用者定義例外名は,「EC-USER-」で始まる任意の例外名を記述して定義します。利用者定義例外名の命名規則については,マニュアル「COBOL2002 言語 標準仕様編 10.5.11(1) 例外」を参照してください。

利用者定義例外名として,「EC-USER-EXCEPTION」という例外名を使用する場合のコーディング例を,次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE.

      PROCEDURE DIVISION.
      DECLARATIVES.
        EXCEPTIONHANDLER SECTION.
          USE AFTER EXCEPTION CONDITION EC-USER-EXCEPTION. *> 1.
            DISPLAY  'EC-USER-EXCEPTION発生'.
      END DECLARATIVES.

          RAISE EXCEPTION EC-USER-EXCEPTION. *> 2.

      END PROGRAM SAMPLE.

  1. 例外宣言手続き部に利用者定義例外名「EC-USER-EXCEPTION」を定義します。
  2. RAISE文にEC-USER-EXCEPTIONを指定して,利用者定義の例外を引き起こします。
    RAISE文で例外を引き起こす場合,TURN指令のチェックをONにして例外チェックを有効にする必要はありません。
    RAISE文については,「21.6 明示的な例外の引き起こし」を参照してください。