ファイル命令

ファイル命令コードには次のものがあります。

ファイル組み込み関数には次のものがあります。

これらの命令は、従来型の構文と自由形式構文の両方で使用可能です。

ほとんどのファイル命令は、プログラム記述ファイルと 外部記述ファイル (ファイル仕様書の 22 桁目に それぞれ F または E) の両方に使用することができます。

外部記述ファイルを特定のファイル命令で使用する場合には、演算項目 2 に ファイル名でなくレコード様式名を指定することができます。したがって、 処理用命令コードでは、使用する演算命令コードの規則に従って、 指定したタイプのレコード様式でファイルの検索または 位置決め (あるいはその両方) が行われます。

OVRDBF (データベース・ファイルの一時変更) コマンドを MBR (*ALL) パラ メーターを指定して使用した場合には、SETLL、SETGT、および CHAIN 命令は、 現在オープンされているファイル・メンバーだけを処理します。詳細については、iSeries Information Center の「データベースおよびファイル・システム」のカテゴリーを参照してください。

CHAIN、READ、READC、READE、READP、および READPE 命令では、 結果データ構造を指定することができます。 これらの命令では、 データはファイルとデータ構造の間で直接転送され、そのファイルの入力仕様書 は処理されません。 したがって、データ構造に対する入力操作の結果として、レコード識別標識ま たはフィールド標識がオンに設定されることはありません。 ファイルに対するすべての入力操作で 結果データ構造が指定されている場合には、入力仕様書は必要ありません。

演算項目 2 にプログラム記述ファイル名を指定する WRITE および UPDATE 命令では、結果のフィールドにデータ構造名が指定されていなければなり ません。 外部記述ファイルまたはレコードに対する WRITE および UPDATE 命令では、 結果データ構造を指定することができます。 これらの命令では、 データはデータ構造とファイルの間で直接転送され、そのファイルの出力仕様書 は処理されません。 ファイルに対するすべての出力命令で 結果データ構造が指定されている場合には、出力仕様書は必要ありません。

次のような場合、外部記述ファイル名またはレコード名に対する入出力命令を実行することによって、 データ構造名を生成することができます。

  1. 入出力命令でレコード名を指定する場合、データ構造の生成元はそのレコードと一致していなければなりません。 つまり、そのデータ構造は LIKEREC(rec) または EXTNAME(file:rec) を使用して定義 されていなければなりません (rec は、その命令で指定された形式名です)。 入力命令の場合、 結果データ構造 (または LIKEDS データ構造の基底構造) は *INPUT を使用して定義されていなければなりません。 出力命令の場合、 結果データ構造は *OUTPUT を使用して定義されていなければなりません。 DISK ファイルに対する UPDATE 命令の場合、 結果データ構造は *INPUT を使用して定義することも、*OUTPUT を使用して定義することもできます。
  2. 命令コード CHAIN、READ、READE、READP、および READPE については、 レコード名に対する入出力命令のほかに、外部記述ファイル名に対する入出力命令でも結果データ構造を指定することができます。 外部記述ファイルの名前を指定するときには、 そのデータ構造には、入力可能フィールドを含むそれぞれのレコードごとに 1 つずつ、 サブフィールド・データ構造が含まれている必要があります。 データ構造に含めることのできるサブフィールド・データ構造は、規則 1 に従って定義されます。 それぞれのサブフィールド・データ構造は、桁 1 から開始されなければなりません。 (オーバーレイするサブフィールドは、通常はキーワード OVERLAY(ds:1) を使用して定義されます。) 特殊なケースとして、ファイルにレコードが 1 つしか含まれない場合は、 結果データ構造は規則 1 に従って定義することができます。
  3. 結果データ構造は、LIKEDS(ds) を使用して定義することもできます (ds は、 これらの規則に従うデータ構造です)。

レコードが見付からなかったか、操作中にエラーが起こったか、あるいは最後 のレコードがすでに検索されている (ファイルの終わり) ために入力操作 (CHAIN、 EXFMT、READ、READC、READE、READP、READPE) でレコードが検索され なかった場合には、データは抜き出されずにプログラムのすべてのフィール ドが変更されないままとなります。

更新ディスク・ファイルに対する CHAIN、READ、READE、READP、または READPE 命令 の命令拡張として N を指定した場合には、レコードはロック なしで読み取られます。 ファイルが更新ディスク・ファイルの場合には、命令 拡張が指定されていないと、レコードはロックされます。

ファイル命令の実行中に起こった例外/エラーは、プログラマーが (エラー標識をコーディングするかまたはファイル・エラー処理サブルーチンを指定して) 処理するか、あるいは RPG IV エラー処理プログラムによって処理することができます。

注:
入力仕様書および出力仕様書に関係するサブプロシージャーの入出力操作には、 同じ名前の内部変数があっても、常に大域名が使用されます。 例えば、サブプロシージャー内とメイン・ソース部分にフィールド名 TOTALS が 定義されている場合には、このサブプロシージャーの入出力操作にメイン・ソース 部分に定義されたフィールドが使用されます。

ヌル値可能フィールドを持つファイルの処理について は、データベースのヌル値サポートを参照してください。