READE (等しいキーのレコードの読み取り)

自由形式構文 READE{(ENHMR)} 検索引数|*KEY 名前 {データ構造}
コード 演算項目 1 演算項目 2 結果フィールド 標識
READE (E N) 検索引数 名前 (ファイルまたはレコード様式) データ構造 _ ER EOF

READE 命令は、レコードのキーが検索引数と一致する場合に全手順ファイル (ファイル 仕様の 18 桁目の F によって識別される) から次の順次 レコードを検索します。 レコードのキーが検索引数と一致しない場合 には、EOF 条件が発生し、レコードはプログラム に戻されません。EOF 条件は、ファイルの終わりになった場合に も適用されます。

検索引数 (検索引数) は、検索するレコードを識別します。 検索引数 オペランドは、従来型の構文においては任意指定ですが、自由形式構文では必須です。 検索引数 は次のいずれかが可能です。

注:
注: ファイルが更新として定義され、N 命令拡張が指定されていない場合、キー値が検索引数と一致しないレコードに対する一時的なレコード・ロックにより、READE 命令が待たされることがあります。 一時的ロックが取得されると、キー値が検索引数に一致しない場合に一時的ロックがリリースされます。

ほとんどの場合、RPG は、一致するレコードがあるかどうかの判別に一時的レ コード・ロックを取得する必要がないシステム・サポートを使用して READE を実行できます。 ただし、RPG がこのサポートを使用できない場合があり、その場合は次のレコードを要求してから、READE 要求でレコードの一致を判別する必要があります。

以下の理由により、RPG は、READE 命令に対し次のレコードの一時的ロックを取得することを必要とします。

注:

図形キーと UCS-2 キーは CCSID が同じでなければなりません。

名前 オペランドは、検索するファイルまたはレコード様式の名前でなければなりません。 レコード様式名を使用できるのは、外部記述ファイル (ファイル仕様の 22 桁目の E によって識別される) の場合だけです。

データ構造 オペランドが指定されている場合、レコードはデータ構造に直接読み込まれます。 名前 がプログラム記述ファイル (ファイル記述仕様書の 22 桁目の F によって識別される) を参照する場合、 データ構造は宣言されているファイルのレコード長と同じ長さのデータ構造にすることができます。 名前 が外部記述ファイルまたは外部記述ファイルのレコード様式 を参照する場合、データ構造は EXTNAME(...:*INPUT) または LIKEREC(...:*INPUT) で定義されているデータ構造にする 必要があります。 データ構造の定義方法、およびファイルとデータ 構造の間でどのようにデータが転送されるかについては、ファイル命令を参照してください。

読み取るファイルが更新ディスク・ファイルの場合には、命令拡張 N を指 定して、読み取り時にレコードをロックする必要がないことを指示することが できます。 詳細については、「WebSphere Development Studio: ILE RPG プログラマーの手引き」を参照してください。

READE 例外 (ファイル状況コードが 1000 より大きい) を 処理するために、命令コード拡張 'E' またはエラー標識 ER を指定できますが、 両方を指定することはできません。 エラー処理の詳細については、ファイル例外/エラーを 参照してください。

EOF 条件が発生した場合、すなわち、検索引数と等しいキーを持つレコードが見付から ないか、またはファイルの終わりになった場合にオンに設定される標識 を 75 から 76 桁目に指定することができます。 この情報は %EOF 組み込み関数からも入手することができます。この関数 は、EOF 条件が発生した場合に '1' を戻します。それ以外の場合には '0' を戻します。

READE 命令が正常に実行されなかった場合には、ファイルを (例えば、CHAIN、SETGT、 または SETLL 命令によって) 再度位置決めしなければなりません。 CHAIN (ファイルからのランダム検索)SETGT (より大きい設定)、または SETLL (下限の設定)を参照してください。

通常、指定されたキーとファイル内の実際のキーの比較は、データ管理機能により実行されます。 データ管理機能でこれを実行できない場合は、16 進数照合シーケンスを使用して比較が実行されます。 この場合、予想通りの結果が得られないことがあります。 詳しくは、WebSphere Development Studio: ILE RPG プログラマーの手引きのセクション『キー付きファイルの使用による予期しない結果』を参照してください。

OPEN 命令または EOF 条件の直後に指定された、検索引数 オペランドを持つ READE では、レコードのキーが検索引数と一致した場合に、ファイルの最初のレコードが検索されます。 検索引数 が指定されていない、OPEN 命令または EOF 条件の直後の READE は、エラー条件を招きます。73 桁目 と 74 桁目のエラー標識が指定されている場合、オンに設定されるか、 または %ERROR によって検査される 'E' 拡張が指定されている場合、オンに 設定されます。ファイルが正常にクローズされて再びオープンされるまでは、それ以上入出力 命令を出すことはできません。

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

詳細については、ファイル命令を参照してください。

注:
命令コード拡張 H、M、および R は、検索引数がリストまたは %KDS() である場合にのみ使用できます。
図 337. READE 命令
*...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