例外処理は、とても大切ですよね。
RPGプログラムでも、Javaの「try~catch」のようなものがあります。
それが、「MONITOR命令」です。
TRYではなく、MONITOR文によってエラー監視を行えます。(MONITOR~ENDMON)
サンプル・プログラム
固定フォーマット
C MONITOR C W@VAL1 DIV(H) W@VAL2 W@VAL3 C ON-ERROR 102 C 'ZERO NG ' DSPLY C Z-ADD *HIVAL W@VAL3 C ENDMON
Freeフォーマット
MONITOR; WRITE RECSAMPLE; DSPLY '登録処理が正常に終了しました。'; ON-ERROR 1021; DSPLY '重複した明細が存在しています。'; ON-ERROR *ALL; DSPLY 'PROGRAM ERRORが発生しました。'; ENDMON;
エラー状況コード
プログラム
状況コード | エラー内容 |
---|---|
00100 | ストリング命令の範囲外の値 |
00102 | ゼロによる除算 |
00103 | 中間結果が結果を入れるだけ大きくない |
00104 | 受け側変数に対して値が小さすぎる |
00105 | 文字の中にある、数値変換関数に対して無効な文字 |
00112 | 日付、時刻、またはタイム・スタンプの値が正しくない |
00113 | 日付オーバーフローまたは下位桁あふれ |
00121 | 配列指標が正しくない |
00221 | 呼び出し側プログラムまたはプロシージャーのエラー |
00222 | ポインターまたはパラメーター・エラー |
00907 | 10進数データエラー |
*PROGRAM | 00100~00999のすべてのプログラムエラーを処理 |
*ALL | 00100~09999すべてのプログラム、ファイルエラーを処理 |
ファイル操作
状況コード | エラー内容 |
---|---|
01021 | すでに存在しているレコードを書き出そうとした |
01211 | クローズされているファイルへの入出力操作 |
01215 | すでにオープン済みのファイルへOPEN が出された |
01216 | 暗黙のOPEN/CLOSE 命令でのエラー |
01217 | 明示のOPEN/CLOSE 命令でのエラー |
01218 | レコードがすでにロックされている |
01221 | 前に読み取りを行わないで更新操作を行おうとし |
*FILE | 01000~09999のすべてのファイルエラーを処理 |
*ALL | 00100~09999のすべてのプログラム、ファイルエラーを処理 |
最後に、例外処理については、下記の資料が詳しく書かれております。
私個人も勉強させていただきました! 感謝です!!