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