タイガー!タイガー!じれったいぞー!(SE編)

AS400, Java, JavaEE, JSF等の開発、習慣など。日々の気づきをまとめたブログ(備忘録)

【AS400】RPGでの例外処理

例外処理は、とても大切ですよね。
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のすべてのプログラム、ファイルエラーを処理


最後に、例外処理については、下記の資料が詳しく書かれております。
私個人も勉強させていただきました! 感謝です!!