COBOL2002 言語 拡張仕様編

[目次][索引][前へ][次へ]

3.2.4 READ文(ファイル共用機能)

形式
書き方1
[図データ]
書き方2
[図データ]

構文規則
  1. READ文のLOCK指定は,LOCK MODE指定がEXCLUSIVEのとき指定できない。

一般規則
  1. ファイルがINPUTモードで開かれているとき,READまたはREAD WITH LOCK文でレコードを施錠することはできない。
  2. 暗黙的または明示的に施錠を要求するREAD文は,呼び出そうとするレコードがほかの実行単位によって施錠されていないときだけ成功する。レコードがほかの実行単位によって施錠されているとき,READ文は不成功となり,入出力状態には'99'が設定され,ファイル位置指示子の変更はしない。
  3. READ文を実行するときに次のレコードが存在しないとき,ファイルの共用にかかわらず,AT END状態を返す。この状態は,例えば,ほかの実行単位でEXTENDモードで開かれているファイルに対して発生する。LOCK MODE指定がAUTOMATICまたはMANUALのとき,ほかの実行単位でEXTENDモードで追加されるレコードを読むことができる。LOCK MODEの指定がないときは保証しない。
  4. LOCK MODE指定がAUTOMATICのとき,それぞれのレコードは読み込みによって施錠され,START文の規則の記述を除き,その実行単位の入出力文の呼び出しで解放される。WITH NO LOCK指定のあるREAD文はレコード施錠を要求しない。
  5. LOCK MODE指定がMANUALのとき,その実行単位のREAD文にWITH LOCK指定があるときだけレコード施錠を要求する。指定がなければ,レコード施錠は要求しない。
    (備考)
    LOCK MODE指定がAUTOMATICまたはMANUALで共用によって開かれているファイルについては,オープンモードに関係なくREAD文でレコード施錠の検知をする。LOCK MODEの指定がなくINPUTモードで共用によって開かれているファイルについては,READ文でレコード施錠の検知は行わない。
    施錠されているレコードを再読したとき,次の結果になる可能性がある。
    ・レコードがまだ施錠されている。または再び施錠された。
    ・レコードが削除された場合,KEY指定のあるREAD文は無効キー状態を返す。
    ・レコードが削除された場合,READ NEXT文はファイルの終わり状態を返すか,または先のREAD文と異なるレコードを読み込もうとする。
    ・ファイル位置指示子を選択した個所に,新しいレコードが挿入されたとき,そのレコードが施錠されていなければ,READ NEXT文で新しいレコードが読み込まれる。
    ただし,このシステムでは,このような位置に新しくレコードが挿入されてもファイル位置指示子が示すレコードは,施錠されたレコードのままで,新しく挿入されたレコードをポイントし直すということはない。そのため,この場合のREAD NEXT文では,常に同じレコードを読み込もうとする。すなわち,新しく挿入されたレコードが読み込まれることはない。

【標準仕様との関連】
COBOL2002 言語 標準仕様編 10.8.33 READ文