ファイル命令

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

ほとんどのファイル命令は、プログラム記述ファイルと外部記述ファイルの両方に 使用することができます。

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

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

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

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

次のような場合、外部記述ファイル名またはレコード名に対する入出力命令を実行することによって、 データ構造名を生成することができます。
  1. 変更の始まり入出力命令でレコード名を指定する場合、データ構造の生成元はそのレコードと一致していなければなりません。 つまり、そのデータ構造は LIKEREC(rec) または EXTNAME(file:rec) を使用して定義 されていなければなりません (rec は、その命令で指定された形式名です)。 LIKEREC および EXTNAME キーワードに *NULL を指定することはできません。
    変更の始まり
    • 入力命令の場合は、*INPUT または *ALL を使用して結果データ構造 (または LIKEDS データ構造の基底構造) を定義しなければなりません。 データ構造が LIKEREC キーワードで定義された場合は、タイプを明示的に指定する必要はありません。
    • PRINTER、SEQ、SPECIAL、または WORKSTN ファイルへの WRITE 命令の場合は、*OUTPUT または *ALL を使用して結果データ構造を定義する必要があります。
    • DISK ファイルへの WRITE の場合は、*OUTPUT または *ALL を使用してこのファイルを定義することができます。 出力バッファーのレイアウトが入力バッファーのレイアウトと同一であり、タイプの指定されていない LIKEREC キーワードを使用してデータ構造が定義されている場合は、WRITE 命令にデータ構造を使用することができます。
    • WORKSTN ファイルのサブファイル・レコードに対する UPDATE の場合は、*OUTPUT または *ALL を使用して結果データ構造を定義することができます。
    • DISK ファイルに対する UPDATE の場合は、*INPUT、*OUTPUT、または *ALL を使用して結果データ構造を定義することができます。 データ構造が LIKEREC キーワードで定義された場合は、タイプを明示的に指定する必要はありません。
    変更の終わり
    変更の終わり
  2. 命令コード CHAIN、READ、READE、READP、および READPE については、 レコード名に対する入出力命令のほかに、外部記述ファイル名に対する入出力命令でも結果データ構造を指定することができます。 外部記述ファイルの名前を指定するときには、そのデータ構造には、入力可能フィールドを含むレコードごとに 1 つずつ、サブフィールド・データ構造が含まれている必要があります。データ構造に含めることのできるサブフィールド・データ構造は、規則 1 に従って定義されます。それぞれのサブフィールド・データ構造は、1 桁目から開始されなければなりません。 (通常、オーバーレイするサブフィールドはキーワード POS(1) または OVERLAY(ds:1) を使用して定義されます。) 特殊なケースとして、ファイルにレコードが 1 つしか含まれない場合は、 結果データ構造は規則 1 に従って定義することができます。
  3. 結果データ構造は、LIKEDS(ds) を使用して定義することもできます (ds は、これらの規則に従うデータ構造です)。
  4. 変更の始まり以下の場合には、*ALL を 2 番目のパラメーターとしてデータ構造を定義しなければ、個々のサブフィールドが別々に転送されるのではなく、結果データ構造と入力または出力バッファーとの間でデータが全体として転送されます。
    • ファイルに対して DATA(*NOCVT) が有効になっていて、データ構造が CCSID(*EXACT) を指定して定義されている場合
    • ファイルに対して DATA(*CVT) が有効になっていて、データ構造が CCSID(*EXACT) を指定して定義されていない場合
    • ファイルに対して DATA キーワードが有効でなく、データ構造体に対して CCSID キーワードが指定されていない場合

    上記以外の場合、データが結果データ構造と入力または出力バッファーとの間 で転送されるときに、 英数字サブフィールドおよびグラフィック・サブフィールドの CCSID 変換が必要になることがあります。

    すべてのケースで、英数字でもグラフィックでもないタイプのサブフィールドのデータは、 データ・タイプに関係なく、入力または出力バッファーと結果データ構造との間で直接転送されます。

    DATA(*CVT | *NOCVT)および CCSID(*EXACT | *NOEXACT)を参照してください。

    変更の終わり

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

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

ファイル命令の実行中に起こった例外/エラーは、プログラマーが (エラー標識をコーディングするかまたはファイル・エラー処理サブルーチンを指定して) 処理するか、あるいは RPG IV エラー処理プログラムによって処理することができます。
注: 入力仕様および出力仕様に関係するサブプロシージャーの入出力操作には、 同じ名前の内部変数があっても、常に大域名が使用されます。 例えば、サブプロシージャー内とメイン・ソース部分にフィールド名 TOTALS が 定義されている場合には、このサブプロシージャーの入出力操作にメイン・ソース 部分に定義されたフィールドが使用されます。
ヌル値可能フィールドを持つファイルの処理について は、データベースのヌル値サポートを参照してください。

プロトタイプ・プログラムまたはプロトタイプ・プロシージャーに、パラメーターとしてファイルを渡すことができます。 パラメーターとしてファイルを渡すと、ファイルの設定のうち、ファイル仕様書キーワードを使用して定義されたものは、そのファイルにアクセスするすべてのプロシージャーについて有効になります。 例えば、変数パラメーターに EXTFILE キーワードに指定されている時に、呼び出し先プロシージャーがそのファイルをオープンすると、呼び出し元の変数の値を使用して、オープンされるファイルの名前が設定されます。 ファイルに関連付けられている変数に対して、呼び出し先プロシージャーがキーワードを介してアクセスまたは変更を実行する必要がある場合、呼び出し元プロシージャーはそれらの変数をパラメーターとして渡さなければなりません。

ファイル・フィードバック組み込み関数の %EOF(ファイル名)、%EQUAL(ファイル名)、%FOUND(ファイル名)、%OPEN(ファイル名)、および %STATUS(ファイル名) を呼び出し先のプロシージャーまたはプログラムで使用して、ファイルの現在の状態を判別することができます。 この場合は、ファイル・パラメーターの名前をオペランドとして組み込み関数に指定してください。

ファイル・パラメーターの詳細については、LIKEFILE(ファイル名)およびファイルに関する一般的な考慮事項を参照してください。