READ ステートメント - 形式 5 - トランザクション (サブファイル)
READ - 形式 5a - トランザクション (サブファイル順次) >>-READ SUBFILE--ファイル名-+------+--MODIFIED--+--------+------> '-NEXT-' '-RECORD-' >--+--------------------+---------------------------------------> '-INTO--ID-1---------' >--+----------------------------------+-------------------------> '-FORMAT--+----+--+-ID-2---------+-' '-IS-' '-リテラル-1---' >--+------------------------------------+-----------------------> '-TERMINAL--+----+--+-ID-3---------+-' '-IS-' '-リテラル-2---' >--+---------------------------------------+--------------------> '-+-INDICATOR--+--+-----+--ID-4---------' +-INDICATORS-+ +-IS--+ '-INDIC------' '-ARE-' >--+-------------------------------------+----------------------> '-+----+--END--命令ステートメント-3---' '-AT-' >--+------------------------------------------+--+----------+-->< '-NOT--+----+--END--命令ステートメント-4---' '-END-READ-' '-AT-'
形式 5a は、サブファイル・レコードである形式を順次アクセス・モードで読み取る場合に使用します。 サブファイル・レコードを順次にアクセスするためには、NEXT MODIFIED 句を指定しなければなりません。 AT END 句は、NEXT MODIFIED 句と一緒でなければ指定できません。
READ - 形式 5b - トランザクション (サブファイル・ランダム) >>-READ SUBFILE--ファイル名-+--------+--------------------------> '-RECORD-' >--+--------------------+---------------------------------------> '-INTO--ID-1---------' >--+----------------------------------+-------------------------> '-FORMAT--+----+--+-ID-2---------+-' '-IS-' '-リテラル-1---' >--+------------------------------------+-----------------------> '-TERMINAL--+----+--+-ID-3---------+-' '-IS-' '-リテラル-2---' >--+---------------------------------------+--------------------> '-+-INDICATOR--+--+-----+--ID-4---------' +-INDICATORS-+ +-IS--+ '-INDIC------' '-ARE-' >--+------------------------------------------+-----------------> '-INVALID--+-----+--命令ステートメント-1---' '-KEY-' >--+----------------------------------------------+-------------> '-NOT INVALID--+-----+--命令ステートメント-2---' '-KEY-' >--+----------+------------------------------------------------>< '-END-READ-'
形式 5b は、サブファイル・レコードである形式をランダム・アクセス・モードで読み取る場合に使用します。 INVALID KEY 句は、サブファイル・レコードにランダムにアクセスする場合にしか使用することができません。 NEXT MODIFIED 句は、サブファイル・レコードにランダムにアクセスする場合には、使用してはなりません。
- NEXT MODIFIED 句
- NEXT MODIFIED 句が指定されていない場合、使用可能になるデータ・レコードは、RELATIVE KEY データ項目の値と一致する相対レコード番号を持つ、サブファイル内のレコードです。
NEXT MODIFIED 句が指定されておらず、RELATIVE KEY データ項目にサブファイル内のレコードの相対レコード番号以外の値が入っている場合には、INVALID KEY 条件が発生し、READ ステートメントの実行は失敗します。
NEXT MODIFIED 句を指定した場合、使用可能になるレコードは、サブファイル内の変更された (変更データ・タグがオンになっている) 最初のレコードです。
次に変更されたレコードの検索は、次のように開始されます。- 次の場合、サブファイルの始まりから開始されます。
- サブファイル制御レコードに対して入出力操作が実行された場合。
- 入出力操作によってサブファイルの消去、初期設定、または表示が行われた場合。
- その他のすべてのケースでは、前の読み取り操作によって読み取られたレコードの次のレコードから開始されます。
RELATIVE KEY データ項目の値は、プログラムにとって使用可能となったレコードの相対レコード番号を反映するために更新されます。
NEXT MODIFIED が指定されており、サブファイル内にユーザーによって変更されたレコード (RELATIVE KEY データ項目に入っている相対レコード番号よりも大きい相対レコード番号を持つ) がない場合には、AT END 条件が生じ、 ファイル状況が 12 に設定され、RELATIVE KEY データ項目の値は更新されません。 その後、命令ステートメント-2 または適用可能な USE AFTER ERROR/EXCEPTION プロシージャーが実行されます。
- 次の場合、サブファイルの始まりから開始されます。
- FORMAT 句
- 形式名が指定されていない場合、使用される形式は、
入力フィールド、入出力フィールド、または潜在フィールドを含むディスプレイ装置に書き込まれた最後のレコード形式です。
ディスプレイ・ファイルにそのような形式がない場合には、
ディスプレイ装置に対する最後の WRITE 操作のレコード形式が使用されます。
FORMAT 句を指定する場合、リテラル-1、または ID-2 の内容は、該当するプログラム装置に対して活動状態である形式にしなければなりません。 READ ステートメントは、指定された形式のデータ・レコードを読み取ります。
複数形式ファイルの場合、正しい結果を得るために、FORMAT 句を必ず指定しなければなりません。
- TERMINAL 句
- TERMINAL 句に関する一般的な考慮事項については、上記の形式 4 を参照してください。
形式 5a または 5b の READ の場合、複数の装置が獲得されているファイルに対して TERMINAL 句が省略されると、 デフォルトのプログラム装置に関連付けられているサブファイルからレコードが読み取られます。
- INDICATOR 句、INDICATORS 句、INDIC 句
- データ・レコードが読み取られるときに使用される標識を指定します。
標識は、データ・レコードについての情報と、それがプログラムに入力された方法を渡すために使用できます。
INDICATORS 句について詳しくは、 「IBM® Rational® Development Studio for i: ILE COBOL プログラマーの手引き」の 『トランザクション・ファイル での標識の使用』を参照してください。
ID-4 は、OCCURS 文節なしで指定された基本ブール・データ項目か、または基本データ・ブールの項目が従属しているグループ項目でなければなりません。
- INVALID KEY 句
- READ ステートメントの実行時に、サブファイルの相対レコード番号と一致しない値が RELATIVE KEY データ項目に入っている場合には、INVALID KEY 条件が生じ、READ ステートメントは正常に実行されません。
NEXT MODIFIED 句が指定されておらず、ファイル名について適用可能な USE プロシージャーがない場合には、INVALID KEY 句を指定しなければなりません。
無効キー条件が発生した場合に生じる事柄の詳細は INVALID KEY 条件を参照してください。
- NOT INVALID KEY 句
- この句では、使用されるステートメントについて無効キー条件が存在しない場合に実行されるプロシージャーを指定します。
- AT END 句
- NEXT MODIFIED が指定されており、サブファイル内にユーザーによって変更されたレコードがない場合には、AT END 条件が生じ、READ ステートメントの実行は失敗します。
NEXT MODIFIED 句が使用されており、ファイル名について適用可能な USE プロシージャーが指定されていない場合には、AT END 句を指定しなければなりません。 ファイルに対して AT END 句と USE プロシージャーの両方が指定されていて、AT END 条件が生じた場合、制御権は AT END 命令ステートメントに移動され、USE プロシージャーは実行されません。
- NOT AT END 句
- この句では、使用されるステートメントについて AT END 条件が存在しない場合に実行されるプロシージャーを指定できます。
- END-READ 句
- この明示範囲終了符号は、READ ステートメントの範囲を区切る働きをします。END-READ 句を使用することによって、READ 条件ステートメントを別の条件ステートメントにネストすることができます。
また、END-READ 句は、READ 命令ステートメントで使用することもできます。
詳細については 範囲区切りステートメントを参照してください。
