エラー条件の戻し

%ERROR(エラー条件の戻し)

[一般形式]

%ERROR

%ERROR は、最後に実行された、拡張 'E' が指定された命令の結果がエラー条件で ある場合に '1' を戻します。 これは、命令に関してエラー標識が設定された場合 と同じになります。 拡張 'E' が指定された命令が開始される前に、%ERROR は '0' を 戻すように設定され、エラーが発生しない場合には、命令後に変更されないまま 残ります。 エラー標識を指定できるすべての命令は、%ERROR 組み込み関数も設定することができます。 CALLP 命令も %ERROR を設定することができます。

%STATUS(ファイルまたはプログラム状況の戻し)

[一般形式]

%STATUS (ファイル名

%STATUS は、プログラムまたはファイル状況に関して設定された最新の値を戻します。%STATUS は、プログラム状況またはいずれかのファイルの状況が変更された 場合 (通常はエラーが発生した場合) に設定されます。

任意指定のファイル名パラメーターを指定しないで %STATUS を使用した場合、この 関数は、最後に変更されたプログラムまたはファイルの状況を戻します。 ファイルを 指定した場合、指定したファイルに関する INFDS *STATUS フィールド に入っている値が戻されます。 このファイルに関して INFDS を指定する 必要はありません。

%STATUS は戻り値 00000 で開始し、'E' 拡張の指定がある命令が開始される 前に 00000 にリセットされます。

%STATUS の検査に最適な時期は、'E' 拡張またはエラー標識が指定されている命令の 直後あるいは INFSR また は *PSSR サブルーチンの先頭です。

使用例

              
_*..1....+....2....+....3....+....4....+....5....+....6....+....7...+....8.
CL0N01FACTOR1+++++++OPCODE&EXTEXTENDED-FACTOR2+++++++++++++++++++++++++++++
C          EXFMT(E) INFILE
C          IF    %ERROR
C          EXSR   CHECK_ERROR
C          ENDIF
C          
C          BEGSR CHECK_ERROR
C          SELECT
C          WHEN   %STATUS < 01000
C* // No error occurred

C          WHEN   %STATUS < 01211
C* // Attempted to read a file that was not open
C          EXSR   INTERNALERROR

C          WHEN   %STATUS = 01331
C* // The wait time was exceeded for a READ operation
C          EXSR   TIMEOUT

C          WHEN   %STATUS = 01261
C* // Operation to unacquired device
C          EXSR   DEVICEERROR

C          WHEN   %STATUS = 01251
C* // Permanent I/O error
C          EXSR   PERMERROR

C          OTHER
C* // Some other error occurred
C          EXSR   FILEERROR
C          ENDSL
C          ENDSR
              
            

状況コード一覧

通常のコード

コード 装置 条件
00000 例外/エラーなし
00002 W 機能キーを使用した表示の終了
00011 W/D/SQ 読み取り時のファイルの終わり
00012 W/D/SQ CHAIN/SETLL/SETGT命令でのレコード不在条件
00013 W WRITE命令でサブファイルがオーバーフロー
注意

『装置』とは、 条件が適用される装置のことです。 次の略語が使用されます。
P = PRINTER; D = DISK; W = WORKSTN; SP = SPECIAL; SQ = 順次。

例外・エラーコード

コード 装置 条件
01011 W/D/SQ 定義されていないレコードタイプ
01021 W/D/SQ 既に存在しているレコードを書き出そうとした
01022 D ファイルメンバーで参照制約エラーが検出された
01023 D/SQ ファイルが操作される前のトリガープログラムのエラー
01024 D/SQ ファイルが操作された後のトリガープログラムのエラー
01031 W/D/SQ 突き合わせフィールドの順序の誤り
01041 配列/テーブルのロード順序エラー
01042 配列/テーブルのロード順序エラー・代替照合順序が使用されます
01051 配列/テーブル・ファイルの項目が多すぎる
01061 ファイル・パラメーターに関連付けされている変数のエラー処理
01071 W/D/SQ 数値順序エラー
01121 W 印刷キーのDDSキーワードに標識が無い
01122 W 前ページ・キーのDDSキーワードに標識が無い
01123 W 後ページ・キーのDDSキーワードに標識が無い
01124 W CLEARキーのDDSキーワードに標識が無い
01125 W HELPキーのDDSキーワードに標識が無い
01126 W HOMEキーのDDSキーワードに標識が無い
01201 W 入力でレコードの不一致が検出された
01211 すべて クローズされているファイルへの入出力操作
01215 すべて すでにオープン済みのファイルへの入出力操作
01216 すべて 暗黙のOPEN/CLOSE命令でのエラー
01217 すべて 暗黙のOPEN/CLOSE命令でのエラー
01218 D/SQ レコードが既にロックされている
01221 D/SQ 前に読み取りを行わないで更新操作を行おうとした
01222 D/SQ 参照制約エラーの為にレコードを割り振ることができない
01231 SP SPECIALファイルでのエラー
01235 P PRTCTLのスペース又はスキップ記入項目にエラー
01241 D/SQ レコード番号が見つからない
01251 W 永続的な入出力エラーが起こった
01255 W セッション又は装置エラーが起こった・回復手順が使用できる
01261 W 入手できる装置の最大数を超えようとした
01271 W 使用できない装置を入手しようとした
01281 W 入手されていない装置への操作
01282 W 制御付きオプションによるジョブの終了
01284 W 単一装置ファイルの2番目の装置を入手できない
01285 W すでに入手済みの装置を入手しようとした
01286 W 共有ファイルをSAVDSまたはINDオプションによりオープンしようとした
01287 W 応答標識がIND標識と上書きをしている
01299 W/D/SQ その他の入出力エラーが検出された
01331 W ワークステーション・ファイルからのREADで待ち時間を超過した
注意

『装置』とは、 条件が適用される装置のことです。 次の略語が使用されます。
P = PRINTER; D = DISK; W = WORKSTN; SP = SPECIAL; SQ = 順次。

オープンまたはクローズ操作の時点で発生したエラーは、メジャー/マイナーの 戻りコード値に関係なく、1216 または 1217 の *STATUS 値になります。