未処理機能チェックの例

次のシナリオでは、 サイクル・メイン・プロシージャーで機能チェックが起こり、 処理されなかった時に発生するイベントについて説明します。このシナリオでは次のことが想定されています。
  1. PGM1 と PGM2 という 2 つのプログラムがあり、それぞれ対応する PRC1 と PRC2 というプロシージャーを含んでいます。
  2. PRC1 は PGM2 を動的に呼び出し、PRC2 が制御を受け取ります。
  3. PRC1 の CALL 命令コードにはエラー標識がコーディングされていません。
  4. PRC2 には RPG 例外処理プログラムがコーディングされていません。 すなわち、エラー標識がコーディングされておらず、活動状態の MONITOR グループもなく、また *PSSR エラー処理サブルーチンもありません。
  5. PRC2 にはポインター・アドレス・エラーがあります。

PGM1 が PGM2 を呼び出すと、基底ポインターが null として定義されているので 、ポインター・エラーが起こります。 したがって、MCH1306 が生成されます。 PRC2 が制御境界を超えて 例外をパーコレートしようとすると、機能チェックが起こります。 図 1 は、 このシナリオと発生するイベントを説明しています。

図 1. 処理不能の機能チェックのシナリオ
ここで次のことが起こります。
  1. PRC2 にはエラー処理プログラムがないので、PRC2 は機能チェックを処理することができず、例外は処理不能となります。
  2. 機能チェックであるために、元の状態を説明する照会メッセージが出され ます。
  3. 照会メッセージに対する応答によっては、PRC2 が終了し、例外が PRC1 に パーコレートされるか (応答が 'C' の場合)、あるいは処理が PRC2 で続行さ れることがあります (応答が 'G' の場合)。