順次アクセスの場合、READ ステートメントはファイル内の次の論理レコードをオブジェクト・プログラムが使用できるようにします。 ランダム・アクセスの場合には、READ ステートメントは、 オブジェクト・プログラムが直接アクセス・ファイル内の指定したレコードを使用可能にします。
READ ステートメントを実行するときには、 関連するファイルを INPUT モードまたは I-O モードでオープンしておく必要があります。
動的アクセス・モードでは、ファイルに対して NEXT 句または PREVIOUS 句を 指定する必要があります。その場合、レコードが順次取り出されます。
動的アクセス・モードでは、ファイルに対して NEXT 句または PREVIOUS 句を指定する必要があります。その場合、レコードが順次取り出されます。
READ...PREVIOUS を指定したが前の論理レコードが存在しない場合は、AT END 条件が発生し、READ ステートメントはエラーとなります。
READ...PREVIOUS を指定する場合、ファイル位置標識の設定を使用し、以下の規則に従って有効なレコードが判別されます。
ID-1 ID-1 は、選択された送り出しレコード記述項目に対して、MOVE ステートメントの規則に従う有効な受け取りフィールドでなければなりません。
ファイル名-1 に関連付けられたレコード域と ID-1 は、 同じストレージ域を占めることはできません。
ファイル名-1 に関連付けられたレコード記述が 1 つだけしかない場合、または ID-1 によって 参照されるすべてのレコードとデータ項目に基本英数字項目または英数字グループ項目が記述されている場合、 INTO 句を指定した READ ステートメントの実行結果は、 指定された順序で以下の規則を適用するのと同じことになります。
ID-1 が日付フィールドである場合は、日付フィールドが関係する移動で説明された動作に従って、 暗黙の MOVE ステートメントが実行されます。
ファイル名-1 に関連付けられたレコード記述が複数あり、それらのすべてに英数字グループ項目または基本英数字項目が記述されていない場合は、以下の規則が適用されます。
KEY IS 句は、索引付きファイルに対してのみ指定できます。データ名-1 は、ファイル名-1 に関連付けられたレコード・キーと一致しなければなりません。データ名-1 を修飾することができます。添え字付けはできません。
順次アクセスの場合は、AT END 句および利用可能な EXCEPTION/ERROR プロシージャーを両方とも省略できます。
AT END 条件の処理に関する詳細は、AT END 条件を参照してください。
INVALID KEY 句および利用可能な EXCEPTION/ERROR プロシージャーは、両方とも省略することができます。
INVALID KEY 句の処理に関する詳細は、無効キー条件を参照してください。
この明示的範囲終了符号は、READ ステートメントの範囲を区切るために使用されます。 END-READ 句を使用することによって、 条件的な READ ステートメントを他の条件ステートメント内にネストすることができます。 END-READ 句は、READ 命令ステートメントと共に使用することもできます。詳しくは、範囲区切りステートメントを参照してください。
ファイル名-1 に関連付けられた複数のレコード記述項目がある場合、それらのレコードは自動的に同じストレージ域を共用します。つまり、それらは暗黙に再定義されます。 READ ステートメントが実行された後、現行レコードの範囲内にあるこれらのデータ項目のみが置換されます。この範囲を超えて格納されているデータ項目は定義されていません。 以下の図では、この概念を説明しています。現在のレコードの範囲が、ファイル名-1 のレコード記述項目を超えている場合には、そのレコードは最大サイズまで右側が切り捨てられます。上記のどちらの場合も、READ ステートメントは正しく実行され、入出力状況として 04 が設定されてレコード長に不一致があったことを示します。

順次アクセス・モードの全ファイルについてフォーマット 1 を使用しなければなりません。
フォーマット 1 の READ ステートメントを実行すると、ファイルから次の論理レコードが取り出されます。アクセスされる次のレコードは、ファイル編成によって決定されます。
NEXT RECORD とは、レコードの論理的なシーケンスの中で次の位置にあるレコードのことです。 NEXT 句を指定する必要はありません。 READ ステートメントの実行には影響がありません。
このファイルのファイル制御項目の中に SELECT OPTIONAL が指定してあり、 オブジェクト・プログラムの実行中にそのファイルが存在しない場合には、 最初の READ ステートメントの実行で AT END 条件が生じます。ただし、ファイルが存在しないので、システム定義のファイル終了処理は実行されません。
ファイル位置標識が、次の論理レコードが存在しないということ、 またはオプショナル入力ファイルが存在しないということを示している場合、次のことが、以下に述べられている順に起こります。
AT END 句および利用可能な EXCEPTION/ERROR プロシージャーは、両方とも省略できます。
AT END 条件が起こると、READ ステートメントの実行は正しく行われません。関連付けられたレコード域の内容は未定義のままであり、 ファイル位置標識は有効な次のレコードが設定されていないことを示すように設定されます。
READ ステートメントの実行中に AT END 条件が起こらなければ、 AT END 句は指定されていても無視され、以下の処置が行われます。
USE AFTER STANDARD EXCEPTION プロシージャーが指定されていなければ、 制御は READ ステートメントの終わりか、または命令ステートメント-2 が指定されていればそのステートメントに移されます。
READ ステートメントの実行が失敗した後では、 関連するレコード域の内容は未定義であり、ファイル位置標識は、 有効な次のレコードが設定されていないことを示すように設定されます。読み込みの失敗に続いて、データにアクセスしたり、データをレコード域へ移動しようとすると、セグメンテーション違反という結果になる可能性があります。
NEXT RECORD とは、キー・シーケンスで次に続く論理レコードです。
PREVIOUS RECORD とは、キー・シーケンスで前に存在する論理レコードです。
索引付きファイルでは、キー・シーケンスは、現行参照キーの昇順となる値のシーケンスです。相対ファイルでは、キー・シーケンスは、 ファイル内に存在するレコードが持つ相対レコード番号の昇順となる値のシーケンスです。
READ ステートメントを実行する場合は、OPEN、START、または READ ステートメントを正常に実行して、 ファイル位置標識を事前に設定しておく必要があります。 READ ステートメントが実行されると、 ファイル位置標識で示されるレコードがそのファイル位置標識によって示されるパスを通してアクセス可能であるならば、 そのレコードが使用可能にされます。
レコードがすでにアクセス可能でない場合 (例えば削除されてしまったため)、ファイル位置標識はファイル内の次の (または前の) 既存レコードを指し示すように更新され、そのレコードが使用可能となります。
順次アクセス・モードのファイルの場合は、NEXT 句を指定する必要はありません。
動的アクセス・モードのファイルの場合、レコードを順次取り出すためには、NEXT 句 (または PREVIOUS 句) を指定しなければなりません。
この条件が存在するのは、ファイル位置標識が、次の論理レコード (または前の論理レコード) が存在しないということ、またはオプションの入力ファイルが存在しないということを示している場合です。 前述の PREVIOUS RECORD についての説明を参照してください。
READ ステートメントの実行の間に、AT END 条件も無効なキー条件も起こらなければ、 AT END 句や INVALID KEY 句は指定されていても無視されます。順次ファイルで AT END 条件が起こらなかった場合と同じプロシージャーが実行されます (AT END 条件を参照)。
DUPLICATES の指定のある ALTERNATE RECORD KEY が参照キーである場合には、 重複するキー値を持つファイル・レコードは、 それらがファイルに入れられた際の順序で使用可能にされます。
ファイルに対して RELATIVE KEY 文節が指定されている場合は、 READ ステートメントが実行されると、 使用可能なレコードの相対レコード番号を示すために、 RELATIVE KEY データ項目が更新されます。
ランダム・アクセス・モードの索引付きファイルおよび相対ファイルに対しては、フォーマット 2 を指定する必要があります。また、レコードの取り出しがランダムであるときの動的アクセス・モードのファイルの場合にも、フォーマット 2 を指定する必要があります。
READ ステートメントの実行方法は、以下のセクションに説明するように、 ファイル編成に応じて異なります。
フォーマット 2 の READ ステートメントが実行されると、参照キーの値が、ファイル・レコードの中にある対応するキー・データ項目の値と比較されます。この比較は、一致した値を持つ最初のレコードが見つかるまで行われます。見つかったレコードはファイル位置標識が位置付けられ、 そしてそのレコードが使用可能になります。値の一致するレコードが見つからない場合には、INVALID KEY 条件が起こり、 READ ステートメントの実行は失敗に終わります。 (共通の処理機能にある「無効キー条件」を参照)。
KEY 句が指定されていなければ、基本 RECORD KEY が、この要求のために使用される参照キーとなります。動的アクセスが指定されている場合、基本 RECORD KEY は、 別の参照キーが設定されるまで、 後続の順次 READ ステートメントのための参照キーとしても使用されます。
KEY 句が指定されている場合には、データ名-1 がこの要求のために使用される参照キーになります。動的アクセスが指定されている場合、別の参照キーが設定されるまで、 この参照キーが後続の順次 READ ステートメントのために使用されます。
フォーマット 2 の READ ステートメントを実行すると、RELATIVE KEY データ項目に含まれている相対レコード番号を持つレコードが指し示されるようにファイル位置標識ポインターが設定され、そのレコードが使用可能になります。
ファイルに該当するレコードが含まれていなければ、INVALID KEY 条件が起こり、 READ ステートメントの実行は失敗に終わります。 (共通の処理機能にある「無効キー条件」を参照)。
KEY 句を相対ファイルに対して指定することはできません。
指標付き編成または相対編成のファイルの場合は、ファイル制御項目の中で動的アクセス・モードを指定することができます。 動的アクセス・モードでは、 使用するフォーマットに応じて、 順次またはランダムのどちらかのレコード検索を使用することができます。
順次レコード検索のときには、NEXT 句を指定したフォーマット 1 を使用する必要があります。順次アクセスに関するその他すべての規則がここでも適用されます。