ILE COBOL 解説書

READ ステートメント - 形式 3 - ランダム検索

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. IBM 拡張

ファイル名
ファイル名は、データ部の FD 記入項目の中で定義されていなければならず、 ソート・ファイルまたはマージ・ファイルの名前であってはなりません。

RECORD
一連のレコードの中の次のレコードです。
KEY IS データ名-1
この句は、索引付きファイルの場合にだけ指定します。 データ名-1 は修飾できますが、添え字付けすることはできません。 データ名-1 では、ファイル名に関連するレコード・キーを識別しなけれ ばなりません。

+----------------------------------IBM 拡張----------------------------------+

データ名-1 は DBCS データ項目として定義できます。 RECORD KEY 文節が DBCS データ項目を指定する場合、READ ステートメントに指定された KEY は DBCS データ項目でなければなりません。

+------------------------------End of IBM 拡張-------------------------------+

INTO 句
INTO ID 句によって、READ ステートメントは次のステートメントと同等になります。

READ ステートメントの処理が正常に終了すると、現行レコードは、レコード名と ID の両方で使用可能になります。

INTO ID 句が指定されている場合、現行レコードは、CORRESPONDING 句のない MOVE ステートメントの規則に従って、入力域から ID 域に移動されます。 ID に関連する添え字付け、指標付け、または参照変更は、レコードが読み取られた後、 ID に転送される直前に評価されます。 (INTO/FROM ID 句も参照してください。)

INTO 句を READ ステートメントに指定できるのは、次の場合です。

可変長レコードについて INTO ID 句を指定すると、 受け入れフィールドに移動されるデータの量が、読み取られる可変長レコードの長さと等しくなります。

ID-1
ID-1 は受け入れフィールドです。 現行レコードは、CORRESPONDING 句のない MOVE ステートメントの規則に従って、レコード域から ID-1 によって指定されている区域に移動されます。 次の使用上の注意が適用されます。

+----------------------------------IBM 拡張----------------------------------+

NO LOCK 句
NO LOCK 句は、READ 操作で、I-O (更新) モードでオープンするファイルに対するレコード・ロックを獲得できないようにします。 さらに、NO LOCK 句を持つ READ 操作は、使用可能となるレコードが他のジョブによってロックされた場合でも成功します。 さらに、この句を持つ READ ステートメントは、前の READ 操作によってロックされたレコードを解放します。

DUPLICATES 句がそのファイルに対して指定されると、NO LOCK 句を指定したステートメントによって読み取られるレコードは、DELETE または REWRITE ステートメントによっては処理できません。

I-O モードでオープンしていないファイルに対して NO LOCK 句を使用すると、コンパイル時にエラー・メッセージを受け取ります。

ファイルおよびレコードのロックの詳細は、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」を参照してください。

FORMAT 句
FORMAT 句が適用されるのは、READ ステートメントが、ASSIGN のファイル装置タイプとして DATABASE が指定された索引付きファイルに対して実行される場合だけです。

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 句

NULL-KEY-MAP IS 句は、 処理されるレコードのキーに対してデータ管理機能が提供するヌル・バイト・マップ値に対応する ID の値を示します。 ID は、添え字を付けたり、参照変更できます。

句は、ASSIGN 文節が装置タイプとして DATABASE を指定し、ALWNULL 属性を指定した索引付きファイルに対してだけ指定できます。

ファイルに代替キーがある場合、ID-5 は、参照の現行キーのヌル・キ ー・マップに関連しています。

ヌル可能フィールドの使用についての詳細は、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」を参照してください。

NULL-MAP IS 句
NULL-MAP IS 句は、処理されるレコードのデータ管理が提供するヌル・バイト・マップ値に対応する ID の値を示します。 ID は、添え字を付けたり、参照変更できます。

この句は、ASSIGN 文節が装置タイプとして DATABASE を指定し、ALWNULL 属性を指定したすべてのファイルに対して指定できます。

ヌル可能フィールドの使用についての詳細は、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」を参照してください。

+------------------------------End of IBM 拡張-------------------------------+

AT END 句
AT END 句は、ファイルが順次アクセス・モードまたは動的アクセス・モードで読み取られる場合にだけ適用されます。

順次読み取りの処理時に次のレコードが存在しない場合には、AT END 条件が発生し (ファイル状況の高位桁は 1)、READ ステートメントの処理が正常に行われません。 次の処置が取られます。

  1. FILE STATUS 文節が指定されている場合には、状況キーが AT END 条件を示すように更新されます。
  2. AT END 句が指定されている場合には、制御が AT END 命令ステートメントに渡されます。 このファイルの EXCEPTION/ERROR プロシージャーは実行されません。
  3. AT END 句が指定されていない場合には、このファイルについての EXCEPTION/ERROR プロシージャーが実行されます。 制御は、このプロシージャーから、READ ステートメントの終わりに続く次の実行可能ステートメントに戻されます。

AT END 条件が起こると、READ ステートメントが正常に実行されません。 関連するレコード域の内容は未定義となり、ファイル位置標識は、次の有効なレコードが確立されていないことを示すように設定されます。

READ ステートメントの実行時に AT END 条件が起こらなかった場合には、AT END 句 (指定されている場合) が無視され、次の処置が取られます。

  1. ファイル位置標識が設定され、ファイル名-1 と関連する I-O 状況が更新されます。
  2. AT END 条件ではない例外条件が存在する場合は、ファイル名-1 について適用可能な USE AFTER EXCEPTION プロシージャーの実行に続いて、 制御権が USE ステートメントの規則に従って移動されます。
  3. 例外条件が存在しない場合には、レコード域でレコードが使用可能になり、INTO 句の存在のために生じる暗黙の移動が実行されます。 制御権は、READ ステートメントの終わりまたは命令ステートメント-2 (指定されている場合) に移動されます。 後者の場合には、命令ステートメント-2 に指定されている各ステートメントについての規則に従って実行が続けられます。 制御権の明示的な移動をもたらすプロシージャー分岐ステートメントまたは条件ステートメントが実行される場合には、 制御権はそのステートメントについての規則に従って移動されます。 それ以外の場合には、制御権は命令ステートメント-2 の実行完了時に READ ステートメントの終わりに移動されます。

READ ステートメントが正常に実行されなかった場合には、関連するレコード域の内容は未定義となり、ファイル位置標識は、次の有効なレコードが確立されていないことを示すように設定されます。

ファイルに対して明示または暗黙の EXCEPTION/ERROR プロシージャーが指定されていない場合には、AT END 句を指定しなければなりません。

注:
順次読み取りとは、順次アクセスのファイルに対する任意の READ ステートメント、 または動的アクセスのファイルに対する READ NEXT、READ PRIOR、READ FIRST、または READ LAST ステートメントのことです。

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 句も実行されません。

NOT AT END 句
NOT AT END 句を指定した READ ステートメントが正常に完了するたびに (ファイル状況の高位桁は 0)、この句に関連付けられている命令ステートメントに制御権が移動します。
INVALID KEY 句
INVALID KEY 句は、相対または索引付きファイルがランダム・アクセス・モードまたは動的アクセス・モードで読み取られる場合にだけ適用されます。

該当する EXCEPTION/ERROR プロシージャーが存在していないファイルについては、INVALID KEY 句を指定しなければなりません。

INVALID KEY 句の処理については INVALID KEY 条件を参照してください。

NOT INVALID KEY 句
NOT INVALID KEY 句は、相対または索引付きファイルがランダム・アクセス・モードまたは動的アクセス・モードで読み取られる場合にだけ適用されます。

NOT INVALID KEY 句を指定した READ ステートメントが正常に完了すると、この句に関連付けられている命令ステートメントに制御権が移動します。

NEXT 句
NEXT 句は、動的アクセス・モードの場合にだけ適用されます。

相対ファイルが動的に読み取られる場合に、NEXT 句が指定されていると、 順次読み取りが行われます。 この句が省略されると、ランダム読み取りが行われます。

索引付きファイルが動的に読み取られる場合に、NEXT 句が指定されていると、順次読み取りが行われます。 NEXT、FIRST、LAST および PRIOR がすべて省略されると、ランダム・アクセス読み取りが行われます。

レコードのブロックに対して READ NEXT 操作が実行される場合には、 ブロックが空になるまで READ PRIOR 操作は実行できません。 READ PRIOR 操作が最初に実行されると、ブロックが空になるまで READ NEXT 操作は実行できません。 これが試みられると、ファイル状況 9U が生じます。 ファイル状況 9U から回復するには、ファイルをクローズし、その後再びオープンしてください。

+----------------------------------IBM 拡張----------------------------------+

FIRST 句
FIRST 句は、索引付きファイルが動的にアクセスされる場合にだけ適用されます。 NEXT、FIRST、LAST および PRIOR がすべて省略されると、ランダム・アクセス読み取りが行われます。
LAST 句
LAST 句は、索引付きファイルが動的にアクセスされる場合にだけ適用されます。 NEXT、FIRST、LAST および PRIOR がすべて省略されると、ランダム・アクセス読み取りが行われます。
PRIOR 句
PRIOR 句は、索引付きファイルが動的にアクセスされる場合にだけ適用されます。 これが指定されると、順次読み取りが行われます。 NEXT、FIRST、LAST および PRIOR がすべて省略されると、ランダム・アクセス読み取りが行われます。

レコードのブロックに対して READ PRIOR 操作が実行される場合には、 ブロックが空になるまで READ NEXT 操作は実行できません。 READ NEXT 操作が最初に実行されると、ブロックが空になるまで READ PRIOR 操作は実行できません。 これが試みられると、ファイル状況 9U が生じます。 ファイル状況 9U から回復するには、ファイルをクローズし、その後再びオープンしてください。

+------------------------------End of IBM 拡張-------------------------------+

END-READ 句
この明示範囲終了符号は、READ ステートメントの範囲を区切る働きをします。 END-READ 句を使用することによって、READ 条件ステートメントを別の条件ステートメントにネストすることができます。 また、END-READ 句は、READ 命令ステートメントで使用することもできます。

詳細は 範囲区切りステートメントを参照してください。

関連情報


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]