READ ステートメント - 形式 3 - ランダム検索 >>-READ--ファイル名--+--------+--+------------+----------------------> '-RECORD-' '-INTO--ID-1-' >--+-----------------------+--+---------------------+-----------> | (1) | '-KEY--+----+--データ名-1-' '-+------+--NO LOCK-----' '-IS-' '-WITH-' >--+--------------------------------+---------------------------> | (1) | '-FORMAT------+----+--+-ID-2---+-' '-IS-' '-リテラル-1-' >--+--------------------------------+---------------------------> | (1) | '-NULL-KEY-MAP------+----+--ID-5-' '-IS-' >--+----------------------------+-------------------------------> | (1) | '-NULL-MAP------+----+--ID-6-' '-IS-' >--+-------------------------------+----------------------------> '-INVALID--+-----+--命令ステートメント-1-' '-KEY-' >--+-----------------------------------+--+----------+--------->< '-NOT INVALID--+-----+--命令ステートメント-2-' '-END-READ-' '-KEY-'
データ名-1 は DBCS データ項目として定義できます。 RECORD KEY 文節が DBCS データ項目を指定する場合、READ ステートメントに指定された KEY は DBCS データ項目でなければなりません。
READ ステートメントの処理が正常に終了すると、現行レコードは、レコード名と ID の両方で使用可能になります。
INTO ID 句が指定されている場合、現行レコードは、CORRESPONDING 句のない MOVE ステートメントの規則に従って、入力域から ID 域に移動されます。 ID に関連する添え字付け、指標付け、または参照変更は、レコードが読み取られた後、 ID に転送される直前に評価されます。 (INTO/FROM ID 句も参照してください。)
可変長レコードについて INTO ID 句を指定すると、 受け入れフィールドに移動されるデータの量が、読み取られる可変長レコードの長さと等しくなります。
DUPLICATES 句がそのファイルに対して指定されると、NO LOCK 句を指定したステートメントによって読み取られるレコードは、DELETE または REWRITE ステートメントによっては処理できません。
I-O モードでオープンしていないファイルに対して NO LOCK 句を使用すると、コンパイル時にエラー・メッセージを受け取ります。
ファイル・ロックおよびレコード・ロックについては、「IBM Rational Development Studio for i: ILE COBOL プログラマーの手引き」を参照してください。
FORMAT 句で指定する値には、この入出力操作で使用するレコード形式の名前が入ります。 システムはこれを使用して、どのレコード形式に対して操作を行うかを指定または選択します。
ID-2 を指定する場合には、10 文字以下の英数字データ項目にしなければなりません。
リテラル-1 を指定する場合は、10 文字以下の大文字の文字ストリングにしなければなりません。
FORMAT 句を指定せずに、ランダム・アクセス・モードで索引付きファイルにアクセスする場合には、定義された最初の形式が使用されます。
全桁がブランクの値は、FORMAT 句が指定されなかった場合と同じ扱いになります。 その値がファイルに対して有効でない場合は、9K の FILE STATUS が戻され、(そのファイルに適用可能であれば) USE プロシージャーが呼び出されます。
ファイルが順次アクセス・モードで読み取られるときには、キー順アクセス・パス内の、 要求された形式を持つ次のレコードが使用可能になります。 形式が省略された場合には、キー順アクセス・パスの中の次のレコードが使用可能になります。
ファイルがランダム・アクセス・モードで読み取られるときには、 指定された形式について定義されたキーが、その形式のレコードを獲得するために使用されます。 その形式のレコードが見つからない場合には、INVALID KEY 条件が発生します。この条件は、定義されたキーを持つが、レコード形式が異なるレコードがある場合でも発生します。
形式が省略された場合には、ファイルの共通キーが使用されて、その共通キー値を持つ任意の形式の最初のレコードが獲得されます。 ファイルの共通キーは、データベース上に存在するレコードに関するファイルのすべての形式に共通なキー・フィールドから成り立っています。 ファイルの共通キーは、ファイル中のすべてのレコード形式で共通な左端のキー・フィールドです。 共通キーは、ファイルについてプログラム内で定義された最初のレコード形式を使用して、レコード記述域内のデータから作成されます。
| レコード | FORMAT 句 | |
|---|---|---|
| 指定された場合 | 省略 | |
| NEXT | 指定された形式を持つ、キー順アクセス・パス内の次のレコードが使用可能になります。 | 形式に関係なく、キー順アクセス・パス内の次のレコードが使用可能になります。 |
| PRIOR | キー順アクセス・パス内のレコードで、ファイル位置標識によって識別されるレコードに先行しており、指定された形式を持つものが使用可能になります。 | キー順アクセス・パス内のレコードで、ファイル位置標識によって識別されるレコードに先行しているものが、形式に関係なく使用可能になります。 |
| FIRST | 指定された形式を持つ、キー順アクセス・パス内の最初のレコードが使用可能になります。 | 形式に関係なく、キー順アクセス・パス内の最初のレコードが使用可能になります。 |
| LAST | 指定された形式を持つ、キー順アクセス・パス内の最後のレコードが使用可能になります。 | 形式に関係なく、キー順アクセス・パス内の最後のレコードが使用可能になります。 |
| 上記以外 | 指定された形式について定義されたキーが、その形式のレコードを獲得するために使用されます。 その形式のレコードが見つからない場合には、INVALID KEY 条件が発生します。 この条件は、定義されたキーを持つが、レコード形式が異なるレコードがある場合でも発生します。 | ファイルの共通キーが使用されて、その共通キー値を持つ任意の形式の最初のレコードが獲得されます。 ファイルの共通キーは、データベース上に存在するレコードに関するファイルのすべての形式に共通なキー・フィールドから成り立っています。 ファイルの共通キーは、ファイル中のすべてのレコード形式で共通な左端のキー・フィールドです。 共通キーは、ファイルについてプログラム内で定義された最初のレコード形式を使用して、レコード記述域内のデータから作成されます。 |
句は、ASSIGN 文節が装置タイプとして DATABASE を指定し、ALWNULL 属性を指定した索引付きファイルに対してだけ指定できます。
ファイルに代替キーがある場合、ID-5 は、参照の現行キーのヌル・キ ー・マップに関連しています。
ヌル可能フィールドの使用について詳しくは、「IBM Rational Development Studio for i: ILE COBOL プログラマーの手引き」を参照してください。
この句は、ASSIGN 文節が装置タイプとして DATABASE を指定し、ALWNULL 属性を指定したすべてのファイルに対して指定できます。
ヌル可能フィールドの使用について詳しくは、「IBM Rational Development Studio for i: ILE COBOL プログラマーの手引き」を参照してください。
AT END 条件が起こると、READ ステートメントが正常に実行されません。 関連するレコード域の内容は未定義となり、ファイル位置標識は、次の有効なレコードが確立されていないことを示すように設定されます。
READ ステートメントが正常に実行されなかった場合には、関連するレコード域の内容は未定義となり、ファイル位置標識は、次の有効なレコードが確立されていないことを示すように設定されます。
READ FIRST または READ LAST ステートメントでは、ファイルが空の場合、または FORMAT 句が使用されていて、ファイルのどのレコードも指定された形式を持たない場合、AT END 条件になります。
ファイルを順次アクセス・モードで読み込んでいるときに AT END 条件が検出された場合には、 さらに READ ステートメントを処理する前に、正常な CLOSE ステートメントとそれに続く正常な OPEN ステートメントを、このファイルに対して処理する必要があります。
順次アクセスのファイルに対する READ ステートメント、 または動的アクセスのファイルに対する READ NEXT または READ PRIOR ステートメントを、AT END 条件が発生した後で試み、 また指定されたメソッドのいずれかでファイル位置標識がリセットされていなかった場合、ファイル状況 46 が戻されます。 AT END 句も NOT AT END 句も実行されません。
該当する EXCEPTION/ERROR プロシージャーが存在していないファイルについては、INVALID KEY 句を指定しなければなりません。
INVALID KEY 句の処理については INVALID KEY 条件を参照してください。
NOT INVALID KEY 句を指定した READ ステートメントが正常に完了すると、この句に関連付けられている命令ステートメントに制御権が移動します。
相対ファイルが動的に読み取られる場合に、NEXT 句が指定されていると、 順次読み取りが行われます。 この句が省略されると、ランダム読み取りが行われます。
索引付きファイルが動的に読み取られる場合に、NEXT 句が指定されていると、順次読み取りが行われます。 NEXT、FIRST、LAST および PRIOR がすべて省略されると、ランダム・アクセス読み取りが行われます。
レコードのブロックに対して READ NEXT 操作が実行される場合には、 ブロックが空になるまで READ PRIOR 操作は実行できません。 READ PRIOR 操作が最初に実行されると、ブロックが空になるまで READ NEXT 操作は実行できません。 これが試みられると、ファイル状況 9U が生じます。 ファイル状況 9U から回復するには、ファイルをクローズし、その後再びオープンしてください。
レコードのブロックに対して READ PRIOR 操作が実行される場合には、 ブロックが空になるまで READ NEXT 操作は実行できません。 READ NEXT 操作が最初に実行されると、ブロックが空になるまで READ PRIOR 操作は実行できません。 これが試みられると、ファイル状況 9U が生じます。 ファイル状況 9U から回復するには、ファイルをクローズし、その後再びオープンしてください。
詳細については 範囲区切りステートメントを参照してください。