順呼び出しの場合、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を指定すると、読み込まれたレコードは、入力レコード領域でも一意名のデータ領域でも利用可能となる。
- ファイル位置指示子が次の論理レコードが存在しないことを示しているか、または不定入力ファイルが存在しない場合、下記の処理が順に行われる。
- ファイル位置指示子の内容に応じた値が、ファイル名-1 に対応する入出力状態に設定される (「手続き部」の章の「入出力状態」のトピックを参照)。
- AT END 指定をしてあると、制御は無条件文-1 に移される。この場合、ファイル名-1 のファイル結合子に対応する USE AFTER EXCEPTION 手続きが設定してあっても実行されない。その後、無条件文-1 の中の各文に関する規則に従って、処理は続行される。その中で、制御の明示をもたらす分岐文または条件文が実行された場合は、その文に関する規則に従って制御が移される。そうでなければ、無条件文-1 の実行が終了した時点で、制御は READ 文の末尾に移される。この場合、NOT AT END指定 があっても、無視される。
- AT END 指定をしていない場合、ファイル名-1 に対応する USE AFTER STANDARD EXCEPTION 手続きを設定する必要がある。この場合、その USE 手続きが実行される。その実行が終了すると、READ 文の末尾の次の実行文に制御が戻される。
AT END 条件が発生した場合、READ 文の実行は不成功になる。
- READ 文の実行が不成功に終わった後では、対応するレコード領域の内容はどうなっているかわからない。また、ファイル位置指示子は、次のレコードが存在しないことを示すように設定される。
- UNIX プラットフォームでの非トランザクション ファイル処理の実行時に FCD3 を使用する場合、レコード ロック状態になると、ロック プロセスのプロセス ID が FCD の fcd-session-id に返される。この処理は、Fileshare を使用する場合は適用されない。
書き方 1、2、3 (順編成ファイル、相対ファイル、索引ファイル) の一般規則
- READ 文の実行中に AT END 条件が発生しなかった場合、AT END 指定をしてあっても無視されて、以下の処理が行われる。
- ファイル位置指示子が設定されて、ファイル名-1 に対応する入出力状態が更新される。
- ファイル終了条件以外の例外条件が発生していると、ファイル名-1 に適用できる USE AFTER EXCEPTION 手続きが指定してあればそれが実行されて、その後で USE 文の規則に従って制御が移される (「USE (使用) 文」のトピックを参照)。
- 例外条件が何も発生していなければ、読み込み対象レコードがレコード領域中で利用できるようにされる。また、INTO を指定してあれば、暗黙の転記処理が行われる。その後で、制御は READ 文の末尾に移される。ただし、無条件文-2 が指定されていれば無条件文-2 に移される。この場合、無条件文-2 の中の個々の文に関する規則に従って、以降の処理が続行される。制御を明示的に移す制御分岐または条件文が実行されると、その文の規則に応じて制御が移される。それ以外の場合には、無条件文-2 の実行が完了すると、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 に指定したデータ項目中に保持されている相対レコード番号がファイル位置指示子に設定され、そのレコードが利用可能にされる。ファイル中にその相対レコード番号のレコードが存在しない場合は、無効キー条件が発生し、READ 文の実行は不成功に終わる (「手続き部」の章の「無効キー条件」のトピックを参照)。
書き方 3、5 (相対ファイルおよび索引ファイル) の一般規則
- IGNORE LOCK 指定をすると、READ 文はレコードがロックされていないかのように実行される。
書き方 3 (索引ファイル) の一般規則
- 索引ファイルを順呼び出しする場合、検索のキーとしている副レコード キーに値が同じものがあると、これらは WRITE 文または REWRITE 文によって書き出された順に利用可能にされる。
書き方 5 (索引ファイル) の一般規則
- KEY 指定をしないと、主レコード キーが検索キーとして使用される。動的呼び出しを指定すると、後に書き方 3 の READ 文を実行するときにも、この検索キーが使用される。
- KEY 指定をすると、データ名-1
または分割キー名
がその参照キーとして使用される。動的呼び出しを指定すると、後に書き方 3 の READ 文を実行するときにも、この検索キーが使用される。ただし、別の参照キーを指定すると、今度はそれが使用されるようになる。
- 書き方 5 の READ 文を実行すると、参照キーの値がファイル中のレコードの対応するデータ項目に格納されている値と順次比較されて、両者の値が最初に一致するものが見つけ出される。ファイル位置指示子がそのレコードを指すように設定されて、そのレコードが利用可能とされる。両者の値が一致するレコードが見つからないと、無効キー条件が発生し、READ 文の実行は不成功に終わる (「手続き部」の章の「無効キー条件」のトピックを参照)。