エラー標識または 'E' 命令コード拡張の指定

エラー標識が使えるコードは、'E' 命令コード拡張も 使えます。 CALLP 命令の場合、エラー標識が使えなくても 'E' 拡張が 使えます。 このことは根本的には同じ、2 つの ILE RPG エラー処理方式を提供することになります。エラー標識または 'E' 拡張の いずれか (両方ではない) を使って、例外を処理することが できます。

注:
エラー標識や 'E' 拡張が、ある命令にコーディングされていても、起こった エラーがその命令に関係ない場合 (例えば、CHAIN 命令の配列指標エラー)、 どのエラー標識や 'E' 拡張も 無視されます。 エラーは、他のプログラム・エラーと同様に取り扱われます。

RPG エラー標識処理プログラムを使用可能にするには、表 33 にリストされた 命令コード (CALLP を除く) の 73 〜 74 桁目にエラー標識を 指定します。 その命令で例外が起こった場合には標識がオンに設定され、 適切なデータ構造 (PSDS または INFDS) が更新され、制御が次の順番の命令に 戻ります。 ここで標識をテストして、取る処置を決定することができます。

'E' 命令コード拡張処理プログラムを使用可能にするには、表 33 の命令コードの いずれかに 'E' (または 'e') を指定します。 'E' 拡張をコーディングすると、 例外に対する組み込み関数、%ERROR および %STATUS によって戻される値に影響 します。 その操作が始まる前に、これらの組み込み関数によって戻される値はゼロに 設定されます。 その操作で例外が起こった場合には、 これらの組み込み関数の戻り値はそれによって更新され、適切な データ構造 (PSDS または INFDS) が更新され、制御が次の順番の命令に 戻ります。 次に、これらの組み込み関数を使って戻り値をテストし、 取るべき処置を決定することができます。

表 33. 拡張 'E' またはエラー標識を 73 〜 74 桁目で使用可能にする 命令コード
ACQ (e) ADDDUR (e) ALLOC (e) CALL (e)
CALLB(d e) CALLP (e m/r)1 CHAIN (e n) CHECK (e)
CHECKR (e) CLOSE (e) COMMIT (e) DEALLOC(e/n)
DELETE (e) DSPLY (e) EXFMT (e) EXTRCT (e)
FEOD (e) IN (e) NEXT (e) OCCUR (e)
OPEN (e) OUT (e) POST (e) READ (e n)
READC (e) READE (e n) READP (e n) READPE (e n)
REALLOC (e) REL (e) RESET (e) ROLBK (e)
SCAN (e) SETGT (e) SETLL (e) SUBDUR (e)
SUBST (e p) TEST (e d/t/z) UNLOCK (e) UPDATE (e)
WRITE (e) XLATE (e p)
注:
  1. CALLP (e m/r) は拡張演算項目 2 の命令コードで、エラー標識を持つことは できません。 しかし、この命令コードに 'e' を指定することによってプログラム状況およびエラー条件は、 判別することができます。

ある命令コードにエラー標識か 'E' 拡張を指定した時には、EXSR 命令によって ファイル・エラー処理サブルーチン (INFSR) またはプログラム・エラー処理サブルーチン (*PSSR) を 明示的に呼び出すことができます。 EXSR 命令によって INFSR または *PSSR が明示的に 呼び出され、ENDSR 命令の 演算項目 2 がブランクであるか、あるいは指定されたフィールドの値が ブランクの場合には、制御は EXSR 命令の後の次の順番の命令に戻されます。