| 自由形式構文 | READE{(ENHMR) } 検索引数|*KEY 名前 {データ構造 } |
| コード | 演算項目 1 | 演算項目 2 | 結果フィールド | 標識 | ||
|---|---|---|---|---|---|---|
| READE (E N) | 検索引数 | 名前 (ファイルまたはレコード様式) | データ構造 | _ | ER | EOF |
READE 命令は、レコードのキーが検索引数と一致する場合に、 全手順ファイルから次の順次レコードを 取り出します。レコードのキーが検索引数と一致しない場合 には、EOF 条件が発生し、レコードはプログラム に戻されません。EOF 条件は、ファイルの終わりになった場合に も適用されます。
ほとんどの場合、RPG は、一致するレコードがあるかどうかの判別に一時的レ コード・ロックを取得する必要がないシステム・サポートを使用して READE を実行できます。 ただし、RPG がこのサポートを使用できない場合があり、その場合は次のレコードを要求してから、READE 要求でレコードの一致を判別する必要があります。
図形キーと UCS-2 キーは CCSID が同じでなければなりません。
名前 オペランドは、検索するファイルまたはレコード様式の名前でなければなりません。レコード様式名を使用できるのは、外部記述ファイルの場合だけです。
データ構造 オペランドが指定されている場合、レコードはデータ構造に直接読み込まれます。 名前 が プログラム記述ファイルを参照する場合、データ構造は、 宣言されたファイルのレコード長と同じ長さの任意のデータ構造にできます。名前 が外部記述ファイルまたは外部記述ファイルのレコード様式 を参照する場合、データ構造は EXTNAME(...:*INPUT) または LIKEREC(...:*INPUT) で定義されているデータ構造にする 必要があります。 データ構造の定義方法、およびファイルとデータ 構造の間でどのようにデータが転送されるかについては、ファイル命令を参照してください。
読み取るファイルが更新ディスク・ファイルの場合には、命令拡張 N を指 定して、読み取り時にレコードをロックする必要がないことを指示することが できます。 詳細については、Rational Development Studio for i ILE RPG プログラマーの手引き を参照してください。
READE 例外 (ファイル状況コードが 1000 より大きい) を 処理するために、命令コード拡張 'E' またはエラー標識 ER を指定できますが、 両方を指定することはできません。 エラー処理の詳細については、ファイル例外/エラーを 参照してください。
EOF 条件が発生した場合、すなわち、検索引数と等しいキーを持つレコードが見付から ないか、またはファイルの終わりになった場合にオンに設定される標識 を 75 から 76 桁目に指定することができます。 この情報は %EOF 組み込み関数からも入手することができます。この関数 は、EOF 条件が発生した場合に '1' を戻します。それ以外の場合には '0' を戻します。
READE 命令が正常に実行された場合には、その命令を満たす次のレコードに、ファイルが置かれます。 レコード・ロック・エラー (状況コード 1218) が発生した場合、ロックされたレコードにファイルが置かれたままになり、そのレコードの読み取りが次の読み取り操作において再試行されます。 その他の何らかのエラーが発生するか、ファイルの終わり条件が存在する場合には、(CHAIN 命令、SETLL 命令、または SETGT 命令を使用して) ファイルの位置を変更する必要があります。 CHAIN (ファイルからのランダム検索)、SETGT (より大きい設定)、または SETLL (下限の設定)を参照してください。
通常、指定されたキーとファイル内の実際のキーの比較は、データ管理機能により実行されます。 データ管理機能でこれを実行できない場合は、16 進数照合シーケンスを使用して比較が実行されます。 この場合、予想通りの結果が得られないことがあります。 詳しくは、Rational Development Studio for i ILE RPG プログラマーの手引きのセクション『キー付きファイルの使用による予期しない結果』を参照してください。
OPEN 命令または EOF 条件の直後に指定された、検索引数 オペランドを持つ READE では、レコードのキーが検索引数と一致した場合に、ファイルの最初のレコードが検索されます。検索引数 が指定されていない、OPEN 命令または EOF 条件の直後の READE は、エラー条件を招きます。73 桁目 と 74 桁目のエラー標識が指定されている場合、オンに設定されるか、 または %ERROR によって検査される 'E' 拡張が指定されている場合、オンに 設定されます。ファイルが正常にクローズされて再びオープンされるまでは、それ以上入出力 命令を出すことはできません。
ヌル値可能フィールドおよびキーを持つレコードの処理については、データベースのヌル値サポートを参照してください。
詳細については、ファイル命令を参照してください。
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
*
* With Factor 1 Specified...
*
* The READE operation retrieves the next record from the file
* FILEA and compares its key to the search argument, KEYFLD.
*
* The %EOF built-in function is set to return '1' if KEYFLD is
* not equal to the key of the record read or if end of file
* is encountered.
*
C KEYFLD READE FILEA
*
* The READE operation retrieves the next record of the type REC1
* from an externally described file and compares the key of the
* record read to the search argument, KEYFLD. (REC1 is a record
* format name.) Indicator 56 is set on if KEYFLD is not equal to
* the key of the record read or if end of file is encountered.
C KEYFLD READE REC1 56
*
* With No Factor 1 Specified...
*
* The READE operation retrieves the next record in the access
* path from the file FILEA if the key value is equal to
* the key value of the record at the current cursor position.
*
* If the key values are not equal, %EOF is set to return '1'.
C READE FILEA
*
* The READE operation retrieves the next record in the access
* path from the file FILEA if the key value equals the key value
* of the record at the current position. REC1 is a record format
* name. Indicator 56 is set on if the key values are unequal.
* N indicates that the record is not locked.
C READE(N) REC1 56