ILE COBOL 解説書

+----------------------------------IBM 拡張----------------------------------+

トランザクション・ファイル

READ ステートメントは、指定された形式を使用して、ある装置のレコードを使用可能にします。 形式がサブファイルである場合には、READ ステートメントは、そのサブファイルの指定されたレコードを使用可能にします。

READ ステートメント - 形式 4 - トランザクション (非サブファイル)

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 は、次の場合にはデータを戻さずに完了することがあります。

  1. 送信勧誘された装置がなく、タイマー機能が有効でない。 (AT END 条件)
  2. ジョブの制御付き取り消しが発生する。 この結果、ファイル状況値は 0A になり、メジャー / マイナー戻りコード値は 0309 になります。
  3. NO DATA 句が省略されており、指定された待機時間が満了した。 この結果、ファイル状況値は 00 になり、メジャー / マイナー戻りコード値は 0310 になります。 指定された待機時間は、ファイルに対しての WAITRCD パラメーターで入力された値、 またはタイマー機能に関して指定された時間間隔です。
  4. NO DATA 句が指定されており、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 句によって指定されたプログラム装置) のデータが使用可能であるかどうかを定期的に検査できます。 このデータの検査は、次のように行われます。

  1. プログラム装置が次のように判別されます。
    1. TERMINAL 句が省略されたかまたはブランクである場合には、デフォルトのプログラム装置が使用されます。 デフォルトのプログラム装置は、最後に試行された READ、WRITE、REWRITE、ACQUIRE、または DROP ステートメントによって使用された装置です。 上記の入出力操作が以前に実行されていない場合は、デフォルトのプログラム装置は最初に獲得されたプログラム装置です。
    2. TERMINAL 句が指定された場合は、指示されたプログラム装置が使用されます。
  2. データが使用可能であるかどうか、およびプログラム装置が送信勧誘されているかどうかを判別するために検査が行われます。
  3. データが使用可能である場合、そのデータがレコード域に戻され、プログラム装置は送信勧誘されなくなります。 すぐに使用できるデータがない場合、NO DATA 命令ステートメントが実行され、プログラム装置は送信勧誘されたままになります。
  4. プログラム装置が送信勧誘されていない場合、AT END 条件が起こり、ファイル状況は 10 に設定されます。

コード D - 1 台のプログラム装置からの読み取り (NO DATA 句が指定されていない場合)

この READ は、常に、データが使用可能になるのを待ちます。 ジョブが制御付き取り消しを受け取った場合や、ファイルに対して WAITRCD 時間が指定されている場合でも、 プログラムが READ ステートメントから制御を取り戻すことはありません。 この READ 操作は次のように実行されます。

  1. プログラム装置が次のように判別されます。
    1. TERMINAL 句が省略されているかまたはブランクの値である場合には、 デフォルトのプログラム装置が使用されます。 デフォルトのプログラム装置は、最後に試行された READ、WRITE、REWRITE、ACQUIRE、DROP、または ACCEPT (属性データ) ステートメントによって使用されたプログラム装置です。 これらの操作がどれも行われていない場合は、 ファイルのオープン時に暗黙に獲得されたプログラム装置が使用されます。 獲得された装置がない場合、AT END 状態が起こります。
    2. TERMINAL 句が指定されている場合は、指定されたプログラム装置が使用されます。
  2. レコード形式が次のように判別されます。
    1. FORMAT 句が省略されているかまたはブランクである場合、戻されるレコード形式はシステムによって判別されます。 ワークステーション装置の場合のレコード形式が判別される方法については、「ICF Programming」を参照してください。 通信装置の場合のレコード形式が判別される方法については、「ICF Programming」の ADDICFDEVE および OVRICFDEVE コマンドの FMTSLT パラメーターに関する章を参照してください。
    2. FORMAT 句が指定されている場合は、指示されたレコード形式が戻されます。 使用可能なデータが、要求されたレコード形式と一致しない場合は、ファイル状況値 9K が設定されます。
  3. データが使用可能になるまで、プログラムの実行は停止します。 READ ステートメントの実行後、データはレコード域に戻されます。 プログラム装置が以前に送信勧誘されていた場合には、この READ ステートメントの後には送信勧誘されなくなります。

INTO 句
次のいずれかの場合でなければ、INTO 句を指定することはできません。
KEY IS 句
KEY IS 句は、索引付きファイルに対してだけ指定できます。 データ名では、ファイル名-1 に関連するレコード・キーを識別しなければなりません。 データ名-1 は修飾できますが、添え字付けすることはできません。
注:
KEY IS 句は、構文検査だけが行われ、READ ステートメントの操作には影響を与えません。
FORMAT 句
リテラル-1 または ID-2 では、読み取られるレコード形式の名前を指定します。 リテラル-1 を指定する場合は、非数字で、10 文字以下の大文字にしなければなりません。 ID-2 (指定されている場合) は、英数字データ項目で、10 文字以下の長さでなければなりません。 ID-2 がブランクである場合、READ ステートメントは、FORMAT 句が省略された場合と同じように実行されます。
NO DATA 句
NO DATA 句が指定されている場合、READ ステートメントは、データがすぐに使用できるかどうかを判別します。 データが使用可能である場合は、そのデータがレコード域に戻されます。 データがすぐには使用できない場合は、命令ステートメント-1 が実行されます。 NO DATA 句を指定すると、READ ステートメントはデータが使用可能になるのを待つことがなくなります。
TERMINAL 句
リテラル-2 または ID-3 では、プログラム装置名を指定します。 リテラル-2 を指定する場合は、10 文字以下の非数字にしなければなりません。 ID-3 を指定する場合は、10 文字以下の英数字データ項目を参照しなければなりません。プログラム装置は、READ ステートメントの実行前に獲得されていなければなりません。 ID-3 がブランクである場合、READ ステートメントは、TERMINAL 句が省略された場合と同じように実行されます。 単一装置ファイルの場合は、TERMINAL 句を省略できます。 プログラム装置がその単一装置であると見なされます。

複数のプログラム装置を獲得しているトランザクション・ファイルの READ について TERMINAL 句を省略すると、 デフォルトのプログラム装置が使用されます。

INDICATOR 句、INDICATORS 句、INDIC 句
データ・レコードが読み取られるときに使用される標識を指定します。 標識は、データ・レコードについての情報と、それがプログラムに入力された方法を渡すために使用できます。

ID-4 は、OCCURS 文節なしで指定された基本ブール・データ項目か、または基本データ・ブールの項目が従属しているグループ項目でなければなりません。

INDICATORS 句の詳細は、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」の『トランザクション・ファイルに関する標識の使用』を参照してください。

AT END 句
AT END 句は、ステートメントの有効範囲を明示的に区切る働きをします。 AT END 条件が検出されると、命令ステートメント-2 が実行されます。 AT END 条件は、送信勧誘されたプログラム装置がなく、タイマー機能が有効でない場合に発生します。

ファイル名について適用可能な 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 命令ステートメントで使用することもできます。

詳細は 範囲区切りステートメントを参照してください。

関連情報

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-'  '-END-READ-'
                 '-KEY-'
 
 

形式 5b は、サブファイル・レコードである形式をランダム・アクセス・モードで読み取る場合に使用します。 INVALID KEY 句は、サブファイル・レコードにランダムにアクセスする場合にしか使用することができません。 NEXT MODIFIED 句は、サブファイル・レコードにランダムにアクセスする場合には、使用してはなりません。

形式 5a または 5b は、通信装置については使用できません。 通信装置についてサブファイル形式の READ ステートメントを使用すると、READ が失敗し、ファイル状況が 90 に設定されます。

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 句の詳細は、「WebSphere Development Studio: 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 命令ステートメントで使用することもできます。

詳細は 範囲区切りステートメントを参照してください。

関連情報

+------------------------------End of IBM 拡張-------------------------------+


脚注:

3
句が指定され、データ項目またはリテラルがブランクの場合には、実行時に句はそれが指定されなかったかのように扱われます。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]