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= 不可
コンパイル時に検査される

TERMINAL³
FORMAT³
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 ステートメントによる入力用には使用されません。

プログラム装置から戻されるレコード形式は、システムによって判別されます。 ワークステーションでこれがどのように決定されるのかについては、「IBM® i Information Center」(Web サイト http://www.ibm.com/systems/i/infocenter/) 内のカテゴリー『データベースおよびファイル・システム』のセクション『ファイル・システムと管理』を参照してください。通信装置の場合、ICF ファイルの形式選定処理に関する詳細は、「ICF プログラミング・マニュアル」を参照してください。

この READ は、次の場合にはデータを戻さずに完了することがあります。
  1. 送信勧誘された装置がなく、タイマー機能が有効でない。 (AT END 条件)
  2. ジョブの制御付き取り消しが発生する。 この結果、ファイル状況値は 0A になり、メジャー / マイナー戻りコード値は 0309 になります。
  3. NO DATA 句が省略されており、指定された待機時間が満了した。 この結果、ファイル状況値は 00 になり、メジャー / マイナー戻りコード値は 0310 になります。 指定された待機時間は、ファイルに対しての WAITRCD パラメーターで入力された値、 またはタイマー機能に関して指定された時間間隔です。
  4. NO DATA 句が指定されており、READ の実行時、すぐに使用できるデータがない。

データが使用可能である場合、それはレコード域に戻されます。 レコード形式は、I-O-FEEDBACK 域と CONTROL-AREA に戻されます。 「プログラム装置送信勧誘からの読み取り」についての詳細は、ディスプレイ装置については、資料「アプリケーション表示プログラミング」を、通信装置については、資料「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 句を指定することはできません。
  • ファイルに関連付けられているすべてのレコードと、INTO 句で指定されているデータ項目が、グループ項目または基本英数字項目である。

    OR

  • ファイル記述記入項目に従属しているレコード記述が 1 つだけである。
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 句について詳しくは、「IBM Rational Development Studio for i: 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 命令ステートメントで使用することもできます。

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

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