ILE RPG 例外処理

ILE RPG は、次の 4 つの例外処理メカニズムを提供します。

RPG では例外はプログラムとファイルの 2 つに分類されています。これによっ て呼び出されるエラー処理サブルーチンのタイプが決定されます。 プログラム例外の例として、ゼロによる除算、範囲外配列指標、負数の SQRT があります。ファイル例外の例としては未定義のレコード・タイプや装置エラーなどがあり ます。

RPG が例外を処理するように指示する方法は 5 つあります。 それらは次のとおりです。

  1. 該当する命令コードの演算仕様書の 73 〜 74 桁目にエラー標識を指定する。
  2. 適切な命令コードに命令コード拡張 'E' を 指定する。
  3. 例外を生成するコードを MONITOR グループの中に組み込む。
  4. ファイル例外について、ファイル仕様書の INFSR キーワードによって定義さ れるファイル・エラー処理サブルーチンをコーディングする。 ファイル・エラー処理サブルーチンは、メイン・ソース・セクションでしか コーディングすることはできません。 サブプロシージャーで使用されたファイルには INFSR をコーディングすること はできません。
  5. プログラム例外について、*PSSR という名前の プログラム・エラー処理サブルーチンをコーディングする。*PSSR は、それがコーディングされているプロシージャーに対して固有で あることに注意してください。 これはメイン・プロシージャーの *PSSR が、メイン・プロシージャーに関連した プログラム・エラーだけを処理することを意味しています。 同様に、サブプロシージャーの *PSSR はサブプロシージャーのエラーだけを処 理します。

メイン・プロシージャー内の例外処理プログラム

例外がメイン・プロシージャーで起こると ILE RPG は次のことを行います。

  1. 演算仕様書にエラー標識が指定されていて、例外がその命令で予期される ものである場合:
    1. 標識をオンに設定する。
    2. 例外を処理する。
    3. 制御は次の ILE RPG 命令で再開する。
  2. 'E' 命令コード拡張が演算仕様書上にあり、この例外がその命令で 予期される場合。
    1. 組み込み関数 %STATUS および %ERROR の戻り値が設定される。
      注:
      'E' 拡張が指定されていなくても何か例外が発生すると、%STATUS は 設定されます。
    2. 例外を処理する。
    3. 制御は次の ILE RPG 命令で再開する。
  3. エラー標識も 'E' 拡張もなく、例外を生成するコードが MONITOR グループの MONITOR ブロックにある場合は、制御は MONITOR グループ内の ON-ERROR セクションに渡されます。
  4. エラー標識または 'E' 拡張がなく、例外を処理できる活動状態の MONITOR グループがなく、かつ

    このときは、その例外が処理され、エラー処理サブルーチンの最初の ステートメントで制御が再開されます。

  5. エラー標識、'E' 拡張、またはエラー処理サブルーチンがコーディングされておらず、かつ例外を処理できる活動状態の MONITOR グループがない場合は、RPG のデフォルトのエラー処理プログラムが呼び出されます。

RPG のデフォルト処理プログラムの詳細については、未処理例外を参照し てください。

サブプロシージャー内の例外処理プログラム

サブプロシージャー内の例外処理プログラムはメイン・プロシージャーとは異 なり、次の方法があります。

サブプロシージャー内の例外処理は、サブプロシージャー用に生成された RPG サイクル・コードがないために、基本的にメイン・プロシージャーと異なっ ています。結果として、サブプロシージャー用のデフォルトの例外処理プログラムがないので 、対応するメイン・プロシージャーのデフォルトの処理プログラムが呼び出された 場合には、サブプロシージャーの異常終了となります。 これは次のことを意味します。

PSDS および INFDS がモジュールの有効範囲をもっていることに注意してくださ い。 メイン・プロシージャーおよびサブプロシージャーともにこれらを アクセスすることができます。

ヒント

*PSSR は、それがコーディングされているプロシージャーに対して ローカルであるので、共通のエラー処理ルーチンとするためには、エラーを処理するための プロシージャーをコーディングし、各ローカル *PSSR からそのプロシージャーを 呼び出すことができます。

OPM と ILE RPG 例外処理との違い

ほとんどの部分で OPM RPG と ILE RPG では、例外処理は同じように作動します。 重要な相違は処理不能例外の部分にあります。

OPM では、例外が起こり、RPG 特有の処理プログラムが活動状態でない場合には 、照会メッセージが出されます。 ILE では、これは、例外が機能チェックである場合にのみ起こります。 機能チェックでない場合には、例外はプロシージャーまたはプログラムの 呼び出し元に渡され、適格なより高位の呼び出しスタック項目が例外を処理できるよう になります。 例えば、次の例を考えてください。

OPM では照会メッセージは PGM C に対して出されます。ILE では、例外は PGM C によって処理されないため PGM B にパーコレートされます。PGM B のエラー標識はオンになって PGM B がエラーを処理できるようになり、その過程で PGM C が異常終了します。照会メッセージはありません。

PGM C に *PSSR エラー処理サブルーチンがコーディングされている場合には、 OPM でも ILE でも、例外は PGM C によって処理され、エラー処理サブルーチン が実行されます。

注:
ILE RPG によって出される照会メッセージは OPM RPG と同様、'RPG' ではなく 'RNQ' の接頭部で始まります。

特定のエラーの場合には一定の処理上の相違が存在します。 詳しくは 、付録A. OPM RPG/400 と AS/400 用 ILE RPG との動作上の相違点を参照してください。