AS400 / IBM i のRPGが実行時に落ちた時、ジョブログには RNX で始まるメッセージが出ることがあります。RNXはRPG実行時エラーの入口です。メッセージIDだけを見て終わるのではなく、直前の処理、対象プログラム、対象ファイル、入力値を合わせて確認します。
ここでは、売上更新RPGが実行時エラーで止まったという想定で、RNX系エラーの調査手順を実例として整理します。RNX番号ごとの厳密な意味は環境のメッセージ説明で確認し、この例では調査の流れを重視します。
想定する状況
| 項目 | 例 |
|---|---|
| 発生処理 | 売上データ更新RPG |
| 症状 | ジョブログにRNX系メッセージが出て異常終了 |
| 疑うこと | 数値変換、桁あふれ、日付変換、配列、ファイル更新、レコードロック |
ジョブログで見ること
| 見るもの | 確認する理由 |
|---|---|
| RNXメッセージID | RPG実行時エラーの種類を絞る |
| プログラム名 | どのRPGで発生したかを確認する |
| 直前のCPF | ファイル、権限、ロックなど別原因がないか見る |
| 発生時刻 | どの入力データやバッチ処理と重なるかを見る |
| ジョブユーザー | 画面実行かバッチ実行か、権限差を見る |
RPGソースで追う場所
RNX系エラーでは、ソースを上から読むより、ジョブログで出たプログラム名と発生箇所の周辺を見ます。数値変換なら文字項目から数値項目への代入、日付なら文字列から日付型への変換、配列なら添字、ファイル処理ならCHAINやREAD、UPDATEの直前直後を確認します。UPDATEに指定するレコード様式名は環境ごとの定義に合わせます。
chain orderKey orderFile; if %found(orderFile); amount = %dec(charAmount: 11: 0); update ORDERREC; endif;
よくある原因
- 数字欄に空白や文字が入っている
- 想定より長い値が入り、桁あふれになる
- 日付形式が環境や入力元で違う
- 配列の範囲外を参照している
- CHAINで見つからない時の処理が不足している
調査メモに残すこと
| 項目 | 例 |
|---|---|
| RNXメッセージ | メッセージIDと本文 |
| 対象プログラム | RPG名、呼び出し元CL |
| 対象データ | キー、注文番号、売上番号など |
| 原因候補 | 数値変換、桁あふれ、日付、配列、ロック |
| 再実行可否 | 途中更新や帳票出力の有無 |
関連して読む記事
RPGの読み方は AS400 RPG保守の読み方、ジョブログ確認は ジョブログ確認手順、単体テスト観点は RPG/CL単体テスト観点 を確認してください。
まとめ
RNX系エラーは、RPGの実行時に何かが想定外になったサインです。ジョブログ、対象プログラム、対象データ、RPGソース、再実行可否をセットで見ることで、修正箇所と業務影響を切り分けやすくなります。
