Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 言語解説書


共通の処理機能

複数の入出力ステートメントに適用される共通の処理機能がいくつかあります。そのような共通の処理機能としては、次のようなものが挙げられます。

次のセクションでは、ボリューム およびリール という用語の使用について説明します。 ボリューム という用語は、ユニット・レコード入出力装置以外の入出力装置を指します。リール はテープ装置にのみ適用されます。順次アクセス・モードにおける直接アクセス装置の処理方法は、テープ装置の処理方法と論理的には同じです。

ファイル状況キー

ファイル制御項目で FILE STATUS 節を指定した場合は、そのファイルに対する要求の実行中、 指定したファイル状況キー (FILE STATUS 節で指定した 2 文字のデータ項目) の中に値が入れられます。 この値は、要求の状況を表します。値がファイル状況キーに入れられた後で、その要求に関連のある EXCEPTION/ERROR 宣言、INVALID KEY 句、または AT END 句が実行されます。

2 種類のファイル状況キー・データ名があります。1 つは、ファイル制御項目の FILE STATUS 節の中でデータ名-1 によって記述されます。これは、ファイル状況キー 1 として認識される最初の 1 文字と、 ファイル状況キー 2 として認識される 2 番目の文字を持つ 2 文字データ項目です。可能な値の組み合わせとその意味については、表 1 に示しています。

もう 1 つのファイル状況キーは、ファイル制御項目の FILE STATUS 節の中にデータ名-8 として記述されます。データ名-8 は、QSAM ファイルには適用されません。データ名-8 の詳細については、FILE STATUS 節を参照してください。

表 1. ファイル状況キーの値と意味
上位数字 意味 下位数字 意味
0 正常終了 0 それ以上の情報はありません。
2 このファイル状況値は、 重複可能な代替キーのある指標ファイルのみに適用されます。

入出力ステートメントは正常に実行されましたが、 複写するキーが見つかりました。 READ ステートメントの場合は、現行参照キーのためのキー値が、 現行参照キー内の次のレコードにある同じキー値と等しい値でした。REWRITE ステートメントまたは WRITE ステートメントの場合は、今書き込まれたレコードが、 重複が許される 1 つ以上の代替レコード・キーに対して複写キーを作成しました。

4 READ ステートメントは正常に実行されましたが、処理されるレコードの長さがそのファイルの固定ファイル属性に一致しませんでした。
5 OPEN ステートメントは正常に実行されましたが、参照されたオプション・ファイルが、OPEN ステートメントの実行時に使用可能でありませんでした。 オープン・モードが I-O または EXTEND ならば、ファイルは作成済みです。 これは、VSAM 順次ファイルには適用されません。
7 NO REWIND 句、REEL/UNIT 句、 または FOR REMOVAL 句を持つ CLOSE ステートメントの場合、 または NO REWIND 句を持つ OPEN ステートメントの場合、 参照されたファイルは非リール / ユニット・メディア上にありました。
1 AT END 条件 0 順次 READ ステートメントを試みましたが、 ファイルの終わりに達したため次の論理レコードがファイル中に存在しませんでした。または、最初の READ ステートメントをオプション入力ファイル上で試みましたが、そのファイルが使用可能でありませんでした。
4 順次 READ ステートメントを相対ファイルで試みましたが、 相対レコード番号の中の有効数字の桁数が、 そのファイル用に記述された相対キー・データ項目のサイズを超えていました。
2 無効キー条件 1 順次にアクセスされた索引付きファイルにシーケンス・エラーがあります。 READ ステートメントが正しく実行されてから、次の REWRITE ステートメントがそのファイルで実行されるまでの間に、 基本レコード・キー値がプログラムによって変更されました。または、連続レコード・キー値に要求される昇順でなければならないという条件に違反していました。
2 レコードを書き込む試みを行いましたが、相対ファイルに複写キーを作成するものでした。または、レコードを書き込んだり再度書き込んだりする試みを行いましたが、そのレコードは DUPLICATES 句がないにもかかわらず、重複基本レコード・キーまたは重複代替レコード・キーを索引付きファイルに作成するものでした。
3 ファイルに存在しないレコードに対しランダムにアクセスする試みを行いました。または、START ステートメントまたはランダム READ ステートメントを、使用可能でないオプション入力ファイル上で試みようとしました。
4 相対ファイルまたは索引付きファイルの外部定義境界を超えて書き込もうとしました。 または、順次 WRITE ステートメントを相対ファイルで試みましたが、相対レコード番号の中の有効数字の桁数が、 そのファイル用に記述された相対キー・データ項目のサイズを超えていました。
3 永続エラー条件 0 これ以上情報がありません。
4 境界違反による永続エラーがあります。 順次ファイルの外部定義境界を超えて書き込もうとしました。
5 INPUT 句、I-O 句、または EXTEND 句を指定した OPEN ステートメントを、使用可能でない非オプションのファイルに対して試みました。
7 OPEN ステートメントで指定したオープン・モードをサポートしていないファイル上で OPEN ステートメントを試みました。 考えられる違反としては、次のものが挙げられます。
  • EXTEND 句または OUTPUT 句を指定しましたが、 そのファイルは書き込み操作をサポートしていません。
  • I-O 句を指定しましたが、 そのファイルは許可される入出力操作をサポートしていません。
  • INPUT 句を指定しましたが、そのファイルは読み取り操作をサポートしていません。
8 OPEN ステートメントを、 以前にロック付きでクローズしたファイル上で試みました。
9 固定ファイル属性とプログラムの中でそのファイルに対して指定した属性の間に不一致が検出されたため、 OPEN ステートメントが正しく実行されませんでした。 これらの属性には、ファイルの編成 (順次、相対、指標付き)、 基本レコード・キー、代替レコード・キー、コード・セット、 最大レコード・サイズ、レコード・タイプ (固定長、可変長)、 およびブロック化因数があります。
4 論理エラー条件 1 オープン・モードにあるファイルに対して OPEN ステートメントを試みました。
2 オープン・モードにないファイルに対して CLOSE ステートメントを試みました。
3 順次アクセス・モードにある大容量記憶ファイルの場合は、 関連したファイルに対して REWRITE ステートメントの実行前に実行された最後の入出力ステートメントが、 正常に実行された READ ステートメントではありませんでした。

順次アクセス・モードにある相対ファイルおよび索引付きファイルの場合には、 関連したファイルに対して DELETE ステートメントまたは REWRITE ステートメントの実行前に実行された最後の 入出力ステートメントが、正常に実行された READ ステートメントではありませんでした。

4 あるレコードをファイルに書き込む試みを行いましたが、 そのレコードは書き換えようとするレコードと同じサイズではなかったために境界違反が起こりました。またはあるレコードを書き込んだり、再度書き込んだりする試みを行いましたが、 そのレコードは関連したファイル名の RECORD IS VARYING 節で許容されている最大レコードより大きかったか、 最小レコードより小さかったために、境界違反が起こりました。
6 INPUT または I-O のオープン・モードにあるファイル上で順次 READ ステートメントを試みましたが、 有効な次のレコードが設定されていませんでした。 その理由としては、次のものが考えられます。
  • 先行した READ ステートメントが正しく実行されなかったにもかかわらず、AT END 条件を引き起こしませんでした。
  • 先行した READ ステートメントが AT END 条件を引き起こしました。
7 INPUT や I-O のオープン・モードではないファイルに対して READ ステートメントの実行を試みました。
8 I-O、OUTPUT、または EXTEND のオープン・モードではないファイルに対して WRITE ステートメントの実行を試みました。
9 I-O のオープン・モードではないファイルに対して DELETE ステートメントまたは REWRITE ステートメントの実行を試みました。
9 インプリメンター定義条件 0
  • マルチスレッド化の場合のみ。ファイルをオープンしなかったスレッドに対して、VSAM ファイルまたは QSAM ファイルの CLOSE が 試行されました。
  • マルチスレッド化なし。VSAM のみの場合。 Enterprise COBOL プログラミング・ガイド」を参照してください。
1 VSAM の場合のみ: パスワードの失敗
2 論理エラー
3 QSAM 以外のすべてのファイル: リソースが利用できません。
5 QSAM 以外のすべてのファイル: ファイル情報が無効または不完全です。
6 VSAM ファイルの場合: OUTPUT 句が指定された OPEN ステートメント、または I-O 句か EXTEND 句が指定された OPEN ステートメントがオプション・ファイルに対して試みられましたが、そのファイルに対する DD ステートメント が指定されていませんでした。

QSAM ファイルの場合: OUTPUT 句が指定された OPEN ステートメント、または I-O 句か EXTEND 句が指定された OPEN ステートメントがオプション・ファイルに対して試みられましたが、そのファイルに対して DD ステートメントではなく、CBLQDA(OFF) ランタイム・オプションが指定されていました。

7 VSAM の場合のみ: OPEN ステートメントが正常に実行されました。ファイルの整合性が確認されました。
8 SELECT ... ASSIGN 節で指定された環境変数の内容が無効であるか、動的割り振りに失敗したことが原因で、オープンが失敗しました。 環境変数の内容の詳細については、ASSIGN 節を参照してください。

無効キー条件

無効キー条件が起こるのは、START、READ、WRITE、REWRITE、 または DELETE の各ステートメントのうちのいずれかの実行中です。 無効キー条件が発生した場合、 その条件を起こした入出力ステートメントは正しく実行されません。

無効キー条件が認識されると、 次の順序で処置が取られます。

  1. ファイル制御項目の中に FILE STATUS 節が指定されている場合は、キー条件が無効であることを示す値がファイル状況キーに入れられます。表 1を参照してください。
  2. この条件を引き起こすステートメントの中に INVALID KEY 句が指定されていると、 制御は INVALID KEY 命令ステートメントに移ります。 このファイルに対して指定された EXCEPTION/ERROR 宣言型プロシージャーがあっても、 それは実行されません。 その場合は、命令ステートメントで指定された各ステートメントの規則に従って実行が続けられます。
  3. ファイルに対する入出力ステートメント内に INVALID KEY 句が指定されておらず、 利用可能な EXCEPTION/ERROR プロシージャーが存在する場合は、そのプロシージャーが実行されます。 NOT INVALID KEY 句は、たとえそれが指定されていても無視されます。

INVALID KEY 句も EXCEPTION/ERROR プロシージャーも両方とも省略することができます。

入出力操作の実行後に無効キー条件が存在しなければ、 INVALID KEY 句は指定されていても無視され、次の処置が取られます。

  • 無効キー条件ではない例外条件が存在すれば、 USE AFTER EXCEPTION プロシージャーの実行に続く USE ステートメントの規則に従って、制御が移されます。
  • 例外条件が何も存在しない場合には、制御は入出力ステートメントの終わりに移されるか、 または、もし NOT INVALID KEY 句が指定されていれば、制御はその句の中に指定されている命令ステートメントの終わりに移されます。

INTO 句および FROM 句

INTO 句および FROM 句は、READ、RETURN、RELEASE、REWRITE、および WRITE の各ステートメントに対して有効です。

作業用ストレージ・セクションまたはリンケージ・セクション内の項目の名前、 またはすでにオープンされている別のファイル用のレコード記述を ID に 指定しなければなりません。

構文図を読む構文図をスキップする
フォーマット: 入出力ステートメントの INTO および FROM 句

>>-+-+-READ---+--ファイル名-1---+--------+--+------------+-+----><
   | '-RETURN-'                '-RECORD-'  '-INTO--ID-1-' |   
   '-+-RELEASE-+--レコード名-1---+------------+------------'   
     +-REWRITE-+                '-FROM--ID-1-'                
     '-WRITE---'                                              

  • レコード名-1 および ID-1 は、同じストレージ域を参照することはできません。
  • レコード名-1 または ID-1 が国別グループ項目を参照する場合、この項目は国別カテゴリーの基本データ項目として処理されます。
  • INTO 句は、READ ステートメントまたは RETURN ステートメントの中で指定することができます。

    INTO 句を伴う READ ステートメントまたは RETURN ステートメントの実行結果は、 次の規則を指定した順序で適用した結果と同じになります。

    • INTO 句を持たない同じ READ ステートメントまたは RETURN ステートメントを実行します。
    • 現行のレコードを CORRESPONDING 句を伴わない MOVE ステートメントの規則に従って、 そのレコード域から ID-1 によって指定された領域へ移動します。現行レコードのサイズは、RECORD 節に指定された規則によって判別されます。 ファイル記述項目が RECORD IS VARYING 節を含む場合には、暗黙の移動はグループ移動になります。 READ ステートメントまたは RETURN ステートメントの実行が正しく行われなかった場合には、 暗黙の MOVE ステートメントの実行は行われません。 ID-1 に関連付けられた添え字付けまたは参照変更は、 レコードが読み取られたか、または戻された後、 それがデータ項目に移動される直前に評価されます。レコードは、そのレコード域と ID-1 によって参照されるデータ項目の両方で使用可能です。
  • FROM 句は RELEASE、REWRITE、 または WRITE の各ステートメントで指定することができます。

    FROM 句を伴う RELEASE ステートメント、REWRITE ステートメント、 または WRITE ステートメントの実行結果は、 次のステートメントを指定した順序で実行した結果と同じになります。

    1. MOVE ID-1 TO レコード名-1
    2. FROM 句を伴わない同じ RELEASE ステートメント、REWRITE ステートメント、または WRITE ステートメント

    RELEASE、REWRITE、または WRITE の各ステートメントの実行を完了した後は、ID-1 によって参照される領域にある情報は、レコード名-1 によって参照される領域の情報が使用可能でない場合でも使用可能です。 ただし、SAME RECORD AREA 節によって指定されたものを除きます。

ファイル位置標識

ファイル位置標識は、本書で使用される概念上のエンティティーですが、特定のシーケンスでの入出力操作中に、特定のファイル内で次にアクセスされるレコードの正確な指定を容易にします。ファイル位置標識の設定値は、OPEN、 CLOSE、READ、および START の各ステートメントによってのみ影響を受けます。 ファイル位置標識の概念は、 OUTPUT または EXTEND のモードでオープンされたファイルでは何も意味を持ちません。


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)