順呼び出しの場合、READ 文はファイルから次
または前
の論理レコードを利用できるようにする。乱呼び出しの場合、READ 文は大記憶ファイルから指定されたレコードを利用できるようにする。
書き方 1 (レコード順編成ファイル) の一般形式
書き方 2 (行順編成ファイル) の一般形式
書き方 3 (相対ファイルおよび索引ファイル) の一般形式
書き方 4 (相対ファイル) の一般形式
書き方 5 (索引ファイル) の一般形式
指令およびランタイム システム スイッチ
- 予約語リストのフラグ設定および修正を行うコンパイラ指令に加えて、次の指令が、本セクションに記載の構文または意味内容に影響を与える可能性がある。
- RETRYLOCK - ロックされているレコードの読み取りを再試行させる。
- 次のランタイム システム スイッチにより、本セクションに記載されている意味が影響を受ける可能性がある。
- B および B1 - READ NEXT 文を実行中にロックされたレコードが出てくると、それを飛ばすようにレコード ポインターを更新させる。
- N - 行順編成レコードを読み取る際に、制御文字の前の空文字の解釈を制御する。
- T - 行順編成レコードを書き込む際に、タブ文字の挿入を制御する。
書き方 1、3、4、および 5 (レコード順編成ファイル、相対ファイル、索引ファイル) の構文規則
- WITH LOCK を指定できるのは、共有ファイル中で単一のレコードをマニュアル ロックする場合だけである。
- WITH NO LOCK を指定できるのは、共有ファイル中でレコードをマニュアルまたは自動的にロックする場合だけである。
書き方 3 (相対ファイルおよび索引ファイル) の構文規則
- 動的呼び出し法でレコードを順検索する場合は、NEXT
または PREVIOUS
を指定する。
書き方 3、4、および 5 (相対ファイルおよび索引ファイル) の構文規則
- WITH KEPT LOCK を指定できるのは、共有ファイル中で複数のレコードをマニュアル ロックする場合だけである。
書き方 4 および 5 (相対ファイルおよび索引ファイル) の構文規則
- 乱呼び出し法または動的呼び出し法でファイルのレコードを乱検索する場合は、書き方 4 または 5 を用いる。
すべての書き方 (すべてのファイル) の一般規則
- READ 文を実行する場合には、対象のファイルを INPUT (入力) モードまたは I-O (入出力両用) モードで開いておく。「OPEN 文」トピックを参照。
- READ 文を実行すると、ファイル名に対応する FILE STATUS データ項目が存在すれば、その値が更新される。「手続き部」の章の「入出力状態」のトピックを参照。
- 1 つのファイルに論理レコードのレコード記述が複数ある場合、これらのレコードは自動的に同じ記憶領域を共有する。これは、暗黙的にレコードを再定義することと同じである。現在のデータ レコードの範囲を超えてデータ項目が存在する場合、READ 文の実行完了時にその内容はどうなっているかわからない。
- INTO を指定すると、読み取ったレコードは、レコード領域から一意名に指定した領域に転記される。その際、CORRESPONDING 指定のない MOVE 文に関する規則が適用される。READ 文の実行が不成功であった場合は、この暗黙的な転記は行われない。一意名に関連付けた添え字付けまたは指標付けは、レコードの読み取り後、データ項目に転記される直前に評価される。
- INTO を指定すると、読み取ったレコードは、入力レコード領域でも一意名のデータ領域でも利用可能となる。
- ファイル位置指示子が次の論理レコードが存在しないことを示しているか、または不定入力ファイルが存在しない場合、下記の処理が順に行われる。
- ファイル位置指示子の内容に応じた値が、file-name-1 に対応する FILE STATUS データ項目に設定される。「手続き部」の章の「入出力状態」のトピックを参照。
- この条件を引き起こす文で AT END が指定されている場合、制御は AT END imperative-statement-1 に移される。この場合、file-name-1 のファイル結合子に対応する USE AFTER EXCEPTION
手続きが設定してあっても実行されない。その後、imperative-statement-1 で指定した各文に関する規則に従って、処理が継続する。制御を明示的に移す手続き分岐文または条件文が実行されると、その文の規則に従って制御が移される。それ以外の場合は、imperative-statement-1
の実行が終了すると制御は READ 文の末尾に移され、NOT AT END 指定は記述されていても無視される。
- AT END 指定をしていない場合、file-name-1 に対応する USE AFTER STANDARD EXCEPTION 手続きを設定する必要がある。この場合、その USE 手続きが実行される。その実行が終了すると、READ 文の末尾の次の実行文に制御が戻される。
AT END 条件が発生した場合、READ 文の実行は不成功になる。
- READ 文の実行が不成功に終わった後では、対応するレコード領域の内容はどうなっているかわからない。また、ファイル位置指示子は、次のレコードが存在しないことを示すように設定される。
書き方 1、2、および 3 (順編成ファイル、相対ファイル、索引ファイル) の一般規則
- READ 文の実行中に AT END 条件が発生しなかった場合、AT END 指定をしてあっても無視されて、次の処理が行われる。
- ファイル位置指示子が設定されて、file-name-1 に対応する入出力状態が更新される。
- AT END 条件以外の例外条件が発生していると、file-name-1 に適用できる USE AFTER EXCEPTION 手続きが指定してあればそれが実行されて、その後で USE 文の規則に従って制御が移される(「USE 文」トピックを参照)。
- 例外条件が何も発生していなければ、読み込み対象レコードがレコード領域中で利用できるようにされる。また、INTO を指定してあれば、暗黙の転記処理が行われる。その後で、制御は READ 文の末尾に移される。ただし、imperative-statement-2
が指定されていれば imperative-statement-2 に移される。この場合、imperative-statement-2 の各文に関する規則に従って、以降の処理が続行される。制御を明示的に移す制御分岐または条件文が実行されると、その文の規則に応じて制御が移される。それ以外の場合は、imperative-statement-1
の実行が終了すると制御は READ 文の末尾に移される。
- NEXT 指定をした READ 文を実行した場合に、対象ファイル中に次の論理レコードが存在しないと、AT END 条件が発生し READ 文の実行は不成功に終わったものと見なされる。「手続き部」の章の「入出力状態」のトピックを参照。
- ここで、
順編成ファイルまたは
順呼び出し法で呼び出すファイルに関しては、NEXT 指定は書いても書かなくてもよい。READ 文の実行には影響を及ぼさない。
書き方 3 (相対ファイルおよび索引ファイル) の一般規則
- 読み込んだレコードがロックされていると、ファイル位置指示子はそのレコードを指すように設定される。以降、READ NEXT 文または READ PREVIOUS 文は同じレコードを再び取り出す。
NOT AT END 指定は、READ 文の実行が正常に終了した場合にだけ実行される。
- PREVIOUS 指定をした READ 文を実行した場合に、対象ファイル中に前の論理レコードが存在しないと、AT END 条件が発生し READ 文の実行は不成功に終わったものと見なされる。
- AT END 条件が検出された場合、前の論理レコードが存在しないため、
そのファイルに対して次に書き方 3 の READ 文を実行するならば、NEXT を指定する。そうでなければ、
下記の処理を続ける。
- 該当するファイルに対して CLOSE 文を実行し、次いで OPEN 文を実行する。いずれも正常に終了しなければならない。
- そのファイルに対して START 文を実行する。正常に終了しなければならない。
- そのファイルに対して、書き方 4 (相対ファイル) または書き方 5 (索引ファイル) の READ 文を実行する。
- 動的呼び出し法を指定したファイルに関して、NEXT 指定をした READ 文を実行すると、
一般規則 8 に記述したように次の論理レコードが取り出される。
- READ 文によって利用可能となるレコードは、次の規則に従って決定される。
- OPEN 文の実行によってファイル位置指示子が設定されているところへ PREVIOUS を指定した READ 文を実行すると、AT END 条件が発生する。そうでなければ、
START 文または OPEN 文の実行によってファイル位置指示子が設定されていて、ファイル位置指示子によって指されるレコードの呼び出しができる場合は、そのレコードが利用可能にされる。相対ファイルのレコードを削除したり索引ファイルの副レコード
キーを変更したりすることによって、レコードが呼び出しできる状態になった場合は、参照キーによって確立されている呼び出し経路中の次のレコードを指すように、ファイル位置指示子が更新される。
ただし、PREVIOUS 指定をしていると、
前のレコードを指すように、ファイル位置指示子が更新される。そして、ファイル位置指示子によって指されるレコードが利用可能にされる。
- 前の READ 文の実行によってファイル位置指示子が設定された場合、ファイル位置指示子はファイル中に存在する次のレコードを指すように更新される。
ただし、PREVIOUS 指定をしていると、
前のレコードを指すように、ファイル位置指示子が更新される。
前の READ 文によってレコードがロックされた場合は、ファイル位置指示子は変更されない。そして、ファイル位置指示子によって指されるレコードが利用可能にされる。
書き方 1、3、4、および 5 (順編成ファイル、相対ファイル、索引ファイル) の一般規則
- 単一のレコードをマニュアル ロックするように指定したファイルを入出力両用に開くと、READ 文に WITH LOCK 指定をした場合にだけ、実行単位はレコード ロックを取得する。単純な READ 文では、レコード ロックを取得できない。ロックされているレコードを読み飛ばすためには、START
文を用いてファイル位置指示子を更新する。ただし、キーの重複を認めている副レコード キーに関しては、この方法を採ることはできない。
- 複数のレコードをマニュアル ロックするように指定したファイルを入出力両用に開くと、READ 文に WITH KEPT LOCK 指定をした場合にだけ、実行単位はレコード ロックを取得する。単純な READ 文では、レコード ロックを取得できない。ロックされているレコードを読み飛ばすためには、START
文を用いてファイル位置指示子を更新する。ただし、キーの重複を認めている副レコード キーに関しては、この方法を採ることはできない。
- WITH WAIT 指定をすると、必要があれば待ってでも、レコード ロックが必ず取得される。
書き方 3 (相対ファイル) の一般規則
- RELATIVE KEY を指定したファイルに対して READ 文を実行すると、利用可能にされたレコードの相対レコード番号が、RELATIVE KEY データ項目に収められる。
書き方 4 (相対ファイル) の一般規則
- READ 文を実行すると、ファイルの RELATIVE KEY に指定したデータ項目中に保持されている相対レコード番号がファイル位置指示子に設定され、そのレコードが利用可能にされる。ファイル中にその相対レコード番号のレコードが存在しない場合は、INVALID
KEY 条件が発生し、READ 文の実行は不成功に終わる(「手続き部」の章の「INVALID KEY 条件」トピックを参照)。
書き方 3 および 5 (相対ファイルおよび索引ファイル) の一般規則
- IGNORE LOCK 指定をすると、READ 文はレコードがロックされていないかのように実行される。
書き方 3 (索引ファイル) の一般規則
- 索引ファイルを順呼び出しする場合、検索のキーとしている副レコード キーに値が同じものがあると、これらは WRITE 文または REWRITE 文によって書き出された順に利用可能にされる。
書き方 5 (索引ファイル) の一般規則
- KEY 指定をしないと、主レコード キーが検索キーとして使用される。動的呼び出しを指定すると、後に書き方 3 の READ 文を実行する際にも、この検索キーが使用される。
- KEY 指定をすると、data-name-1
または分割キー名 (split-key-name)
がその参照キーとして使用される。動的呼び出しを指定すると、後に書き方 3 の READ 文を実行する際にも、この参照キーが使用される。ただし、別の参照キーを指定すると、今度はそれが使用されるようになる。
- 書き方 5 の READ 文を実行すると、参照キーの値がファイル中のレコードの対応するデータ項目に格納されている値と順次比較されて、両者の値が最初に一致するものが見つけ出される。ファイル位置指示子がそのレコードを指すように設定されて、そのレコードが利用可能とされる。両者の値が一致するレコードが見つからないと、INVALID
KEY 条件が発生し、READ 文の実行は不成功に終わる(「手続き部」の章の「INVALID KEY 条件」トピックを参照)。