COBOL2002 使用の手引 手引編


21.2.1 例外名

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

〈この項の構成〉

(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データ項目が区域外である※2

OCCURS 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」が発生した(入出力状態の詳細は,「付録G 入出力状態の値」を参照)

  • 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-RAISING

EXIT文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 明示的な例外の引き起こし」を参照してください。