+----------------------------------IBM 拡張----------------------------------+
READ ステートメントは、指定された形式を使用して、ある装置のレコードを使用可能にします。 形式がサブファイルである場合には、READ ステートメントは、そのサブファイルの指定されたレコードを使用可能にします。
READ ステートメント - 形式 4 - トランザクション (非サブファイル) >>-READ--ファイル名--+--------+--+------------+-----------------> '-RECORD-' '-INTO--ID-1-' >--+------------------------------+-----------------------------> '-FORMAT-+----+-+-ID-2-------+-' '-IS-' '-リテラル-1-' >--+--------------------------------+---------------------------> '-TERMINAL-+----+-+-ID-3-------+-' '-IS-' '-リテラル-2-' >--+-----------------------------+------------------------------> '-+-INDICATOR--+-+-----+-ID-4-' +-INDICATORS-+ +-IS--+ '-INDIC------' '-ARE-' >--+-------------------------------+----------------------------> '-NO DATA--命令ステートメント-1-' >--+-----------------------------------+------------------------> '-+----+--END--命令ステートメント-2-' '-AT-' >--+----------------------------------------+--+----------+---->< '-NOT--+----+--END--命令ステートメント-3-' '-END-READ-' '-AT-'
形式 4 を使用するのは、サブファイル・レコードではない形式を読み取る場合だけです。 RELATIVE KEY データ項目が FILE-CONTROL 記入項目に指定されていても使用されません。 形式 4 の READ ステートメントは、サブファイル・レコードについては無効です。 ただし、表示画面上で更新されたサブファイル・レコードをサブファイルに入れるためには、 サブファイル制御レコード形式について形式 4 の READ ステートメントを使用しなければなりません。
データが使用可能である場合、それはレコード域に戻されます。 レコード形式とプログラム装置の名前は、I-O-FEEDBACK 域と CONTROL-AREA に戻されます。
READ ステートメントは、ファイル用に獲得された装置がある場合にだけ有効です。 READ が実行され、獲得された装置がなかった場合は、ファイル状況が 92 (論理エラー) に設定されます。
形式 4 の READ ステートメントが機能する方法は、次の条件によって異なります。
以下の説明で、「データが使用可能 / 戻される」という表現は、応答標識のみが設定される状態も含んでいます。 これは、別個の標識域が使用され、標識がファイル用のレコード域に戻されない場合にも当てはまります。
次の表は、句の可能な組み合わせと、単一装置ファイルまたは複数装置ファイルに対して実行される機能を示しています。
たとえば、TERMINAL が N、FORMAT が N、NO DATA が N であれば、単一装置は
D、複数装置は A です。
句 | Y= 可 N= 不可 | |
---|---|---|
コンパイル時に検査される |
TERMINAL3 FORMAT3 NO DATA |
N N N N Y Y Y Y N N Y Y N N Y Y N Y N Y N Y N Y |
実行時に判別される |
単一装置 複数装置 |
D C D B D C D B A A D B D C D B |
コード A 〜 D について以下に説明します。
コード A - 送信勧誘されたプログラム装置からの読み取り (複数装置ファイルだけ)
このタイプの READ は、使用可能なデータを持つ、最初に送信勧誘されたプログラム装置からデータを受け取ります。 送信勧誘されたプログラム装置は、入力を送信するよう勧誘されているワークステーションまたは通信装置 (APPC、SNUF、 BSCEL、非同期通信など) です。 送信勧誘は、DDS キーワード INVITE を指定した形式でプログラム装置に書き込むことによって行われます。 送信勧誘されたプログラム装置からの読み取りが実際に行われると、その装置は送信勧誘されなくなります。 そのプログラム装置は、再送信勧誘されるか、あるいは TERMINAL 句または FORMAT 句を指定してそのプログラム装置に READ が出されない限り、 別の READ ステートメントによる入力用には使用されません。
プログラム装置から戻されるレコード形式は、システムによって判別されます。 ワークステーションごとのレコード形式の判別方法の詳細については、Web サイト http://www.ibm.com/eserver/iseries/infocenter にある、iSeries Information Center の「データベースおよびファイル・システム」カテゴリーの中の『ファイル・システムと管理』セクション を参照してください。通信装置の場合、ICF ファイルの形式選定処理に関する詳細は、「ICF Programming」を参照してください。
この READ は、次の場合にはデータを戻さずに完了することがあります。
データが使用可能である場合、それはレコード域に戻されます。 レコード形式は、I-O-FEEDBACK 域と CONTROL-AREA に戻されます。 「プログラム装置送信勧誘からの読み取り」についての詳細は、 ディスプレイ装置については、「AS/400 Advanced Series Application Display Programming」を、通信装置については、「ICF Programming」を参照してください。
コード B - 1 台のプログラム装置からの読み取り (無効な組み合わせ)
コンパイル時メッセージが出され、NO DATA 句は無視されます。 NO DATA 句が省略される場合の同じ句の組み合わせについて、表の項目を参照してください。
コード C - 1 台のプログラム装置からの読み取り (NO DATA 句を指定している場合)
READ ステートメントのこの機能を使用すると、プログラムの実行を停止して、データが使用可能になるまで待つことはありません。 データが即時に使用可能となるか、そうでなければ NO DATA 命令ステートメントが実行されます。
この READ 機能を使用して、特定のプログラム装置 (デフォルトのプログラム装置または TERMINAL 句によって指定されたプログラム装置) のデータが使用可能であるかどうかを定期的に検査できます。 このデータの検査は、次のように行われます。
コード D - 1 台のプログラム装置からの読み取り (NO DATA 句が指定されていない場合)
この READ は、常に、データが使用可能になるのを待ちます。 ジョブが制御付き取り消しを受け取った場合や、ファイルに対して WAITRCD 時間が指定されている場合でも、 プログラムが READ ステートメントから制御を取り戻すことはありません。 この READ 操作は次のように実行されます。
または
複数のプログラム装置を獲得しているトランザクション・ファイルの READ について TERMINAL 句を省略すると、 デフォルトのプログラム装置が使用されます。
ID-4 は、OCCURS 文節なしで指定された基本ブール・データ項目か、または基本データ・ブールの項目が従属しているグループ項目でなければなりません。
INDICATORS 句の詳細は、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」の『トランザクション・ファイルに関する標識の使用』を参照してください。
ファイル名について適用可能な USE プロシージャーが指定されていない場合には、AT END 句を指定しなければなりません。 ファイルに対して AT END 句と USE プロシージャーの両方が指定されていて、AT END 条件が生じた場合、制御権は AT END 命令ステートメントに移動され、USE プロシージャーは実行されません。
詳細は 範囲区切りステートメントを参照してください。
関連情報
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-' '-END-READ-' '-KEY-'
形式 5b は、サブファイル・レコードである形式をランダム・アクセス・モードで読み取る場合に使用します。 INVALID KEY 句は、サブファイル・レコードにランダムにアクセスする場合にしか使用することができません。 NEXT MODIFIED 句は、サブファイル・レコードにランダムにアクセスする場合には、使用してはなりません。
形式 5a または 5b は、通信装置については使用できません。 通信装置についてサブファイル形式の READ ステートメントを使用すると、READ が失敗し、ファイル状況が 90 に設定されます。
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 句を指定する場合、リテラル-1、または ID-2 の内容は、該当するプログラム装置に対して活動状態である形式にしなければなりません。 READ ステートメントは、指定された形式のデータ・レコードを読み取ります。
複数形式ファイルの場合、正しい結果を得るために、FORMAT 句を必ず指定しなければなりません。
形式 5a または 5b の READ の場合、複数の装置が獲得されているファイルに対して TERMINAL 句が省略されると、 デフォルトのプログラム装置に関連付けられているサブファイルからレコードが読み取られます。
INDICATORS 句の詳細は、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」の『トランザクション・ファイルに関する標識の使用』を参照してください。
ID-4 は、OCCURS 文節なしで指定された基本ブール・データ項目か、または基本データ・ブールの項目が従属しているグループ項目でなければなりません。
NEXT MODIFIED 句が指定されておらず、ファイル名について適用可能な USE プロシージャーがない場合には、INVALID KEY 句を指定しなければなりません。
無効キー条件が発生した場合に生じる事柄の詳細は INVALID KEY 条件を参照してください。
NEXT MODIFIED 句が使用されており、ファイル名について適用可能な USE プロシージャーが指定されていない場合には、AT END 句を指定しなければなりません。 ファイルに対して AT END 句と USE プロシージャーの両方が指定されていて、AT END 条件が生じた場合、制御権は AT END 命令ステートメントに移動され、USE プロシージャーは実行されません。
詳細は 範囲区切りステートメントを参照してください。
関連情報
+------------------------------End of IBM 拡張-------------------------------+