例外エラーの処理操作(モニター)
処理構成
[自由形式構文]
MONITOR
MONITOR 監視グループの開始を意味します。
MONITOR グループは下記の要素から構成され、状況コードに基づいて条件付きエラー処理を実行します。
・MONITOR ステートメント
・1つ以上の ON-ERROR グループ
・1つの ENDMON ステートメント
ON-ERROR {例外識別コード{:例外識別コード}}
WHEN 命令と同様の構文で、ON-ERRORで指定した例外コードを処理します。また、*PROGRAM *FILE を指定することもできます。
ENDMON
MONITOR 監視グループの終わりを意味します。
MONITOR から ON-ERROR までの処理をモニターしエラー発生で該当の ON-ERROR が処理され、ON-ERROR のブロックが終了すると制御は ENDMON に渡されます。
MONIOTR から ON-ERROR までの間にエラーが発生しない場合は、ENDMON に制御が渡ります。
MONITOR グループ内で別プロシージャを呼び出しても監視されますが、呼び出し先に MONITOR グループがある場合はそちらを優先します。
命令に(E)拡張またはエラー標識がある場合、エラーはその(E)拡張またはエラー標識によって処理されます。
ON-ERROR 内で発生したエラーは処理されません。
使用例
_*..1....+....2....+....3....+....4....+....5....+....6....+....7...+....8.
CL0N01FACTOR1+++++++OPCODE&EXTFACTOR2+++++++RESULT++++++++LEN++D+HILOEQ....
C MONITOR
C*
C CHAIN MSBCF 96
C*
C ON-ERROR 1211
C* ... FILE-NOT-OPEN
C*
C ON-ERROR *FILE
C* ... その他FILEのエラー
C*
C ON-ERROR 00100 : 00121
C* ... ストリングエラーおよび配列指標エラー
C*
C ON-ERROR
C* ... その他のエラー
C*
C ENDMON
例外・エラーコード
| コード | 装置 | 条件 |
|---|---|---|
| 01011 | W/D/SQ | 定義されていないレコードタイプ |
| 01021 | W/D/SQ | 既に存在しているレコードを書き出そうとした |
| 01022 | D | ファイルメンバーで参照制約エラーが検出された |
| 01023 | D/SQ | ファイルが操作される前のトリガープログラムのエラー |
| 01024 | D/SQ | ファイルが操作された後のトリガープログラムのエラー |
| 01031 | W/D/SQ | 突き合わせフィールドの順序の誤り |
| 01041 | 配列/テーブルのロード順序エラー | |
| 01042 | 配列/テーブルのロード順序エラー・代替照合順序が使用されます | |
| 01051 | 配列/テーブル・ファイルの項目が多すぎる | |
| 01061 | ファイル・パラメーターに関連付けされている変数のエラー処理 | |
| 01071 | W/D/SQ | 数値順序エラー |
| 01121 | W | 印刷キーのDDSキーワードに標識が無い |
| 01122 | W | 前ページ・キーのDDSキーワードに標識が無い |
| 01123 | W | 後ページ・キーのDDSキーワードに標識が無い |
| 01124 | W | CLEARキーのDDSキーワードに標識が無い |
| 01125 | W | HELPキーのDDSキーワードに標識が無い |
| 01126 | W | HOMEキーのDDSキーワードに標識が無い |
| 01201 | W | 入力でレコードの不一致が検出された |
| 01211 | すべて | クローズされているファイルへの入出力操作 |
| 01215 | すべて | すでにオープン済みのファイルへの入出力操作 |
| 01216 | すべて | 暗黙のOPEN/CLOSE命令でのエラー |
| 01217 | すべて | 暗黙のOPEN/CLOSE命令でのエラー |
| 01218 | D/SQ | レコードが既にロックされている |
| 01221 | D/SQ | 前に読み取りを行わないで更新操作を行おうとした |
| 01222 | D/SQ | 参照制約エラーの為にレコードを割り振ることができない |
| 01231 | SP | SPECIALファイルでのエラー |
| 01235 | P | PRTCTLのスペース又はスキップ記入項目にエラー |
| 01241 | D/SQ | レコード番号が見つからない |
| 01251 | W | 永続的な入出力エラーが起こった |
| 01255 | W | セッション又は装置エラーが起こった・回復手順が使用できる |
| 01261 | W | 入手できる装置の最大数を超えようとした |
| 01271 | W | 使用できない装置を入手しようとした |
| 01281 | W | 入手されていない装置への操作 |
| 01282 | W | 制御付きオプションによるジョブの終了 |
| 01284 | W | 単一装置ファイルの2番目の装置を入手できない |
| 01285 | W | すでに入手済みの装置を入手しようとした |
| 01286 | W | 共有ファイルをSAVDSまたはINDオプションによりオープンしようとした |
| 01287 | W | 応答標識がIND標識と上書きをしている |
| 01299 | W/D/SQ | その他の入出力エラーが検出された |
| 01331 | W | ワークステーション・ファイルからのREADで待ち時間を超過した |
『装置』とは、 条件が適用される装置のことです。 次の略語が使用されます。
P = PRINTER; D = DISK; W = WORKSTN; SP = SPECIAL; SQ = 順次。
オープンまたはクローズ操作の時点で発生したエラーは、メジャー/マイナーの 戻りコード値に関係なく、1216 または 1217 の *STATUS 値になります。