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


OPEN ステートメント

OPEN ステートメントは、ファイルの処理を開始します。 ラベルのチェックまたは書き込み、あるいはその両方を行います。

構文図を読む構文図をスキップする
フォーマット 1: 順次ファイルの OPEN ステートメント

>>-OPEN--------------------------------------------------------->

   .----------------------------------------------------------.   
   |          .-------------------------------------------.   |   
   V          V                                           |   |   
>----+-INPUT----ファイル名-1---+-------------------------+-+-+-+-><
     |                        |          (1)            |   |     
     |                        +-REVERSED----------------+   |     
     |                        |                     (1) |   |     
     |                        '-+------+--NO REWIND-----'   |     
     |                          '-WITH-'                    |     
     |         .---------------------------------------.    |     
     |         V                                       |    |     
     +-OUTPUT----ファイル名-2---+---------------------+-+----+     
     |                         '-+------+--NO REWIND-'      |     
     |                           '-WITH-'                   |     
     |      .--------------.                                |     
     |      V              |                                |     
     +-I-O----ファイル名-3--+--------------------------------+     
     |         .--------------.                             |     
     |         V              |                             |     
     '-EXTEND----ファイル名-4--+-----------------------------'     

注:
  1. VSAM ファイルの場合、REVERSED および WITH NO REWIND 句は無効です。
構文図を読む構文図をスキップする
フォーマット 2: 索引付きおよび相対ファイルの OPEN ステートメント

         .------------------------------.   
         |          .--------------.    |   
         V          V              |    |   
>>-OPEN----+-INPUT-----ファイル名-1-+--+-+----------------------><
           |         .--------------. |     
           |         V              | |     
           +-OUTPUT-----ファイル名-2-+-+     
           |      .--------------.    |     
           |      V              |    |     
           +-I-O-----ファイル名-3-+----+     
           |         .--------------. |     
           |         V              | |     
           '-EXTEND-----ファイル名-4-+-'     

構文図を読む構文図をスキップする
フォーマット 3: 行順次ファイルの OPEN ステートメント

         .------------------------------.   
         |          .--------------.    |   
         V          V              |    |   
>>-OPEN----+-INPUT-----ファイル名-1-+--+-+----------------------><
           |         .--------------. |     
           |         V              | |     
           +-OUTPUT-----ファイル名-2-+-+     
           |         .--------------. |     
           |         V              | |     
           '-EXTEND-----ファイル名-4-+-'     

INPUT、OUTPUT、I-O、および EXTEND 句は、ファイルのオープンに使用するモ ードを指定します。キーワード OPEN と共に、INPUT、OUTPUT、I-O、または EXTEND の各句のうち少なくとも 1 つを指定しなければなりません。INPUT、 OUTPUT、I-O、および EXTEND の句は、任意の順序で指定できます。

INPUT
入力操作を実行できます。
OUTPUT
出力操作を実行できます。この句は、ファイルの作成時に指定することができます。

OUTPUT は下記のファイルには指定しないでください。

  • レコードを含むファイル。このファイルは新規データに置き換えられます。

    すでにレコードが入っているファイルに OUTPUT 句が指定されると、 データ・セットは再使用可能として定義しなければならず、 代替索引を持つことができなくなります。 ファイル内のレコードは新規データに置き換えられ、 SELECT ステートメント内の ALTERNATE RECORD KEY 節はすべて無視されます。

  • DD ダミー・カードで定義されたファイル。 予測できない結果が生じます。
I-O
入力操作と出力操作の両方を実行できます。I-O 句は、直接アクセス装置に割り当てられているファイルに対してのみ指定することができます。

I-O 句は行順次ファイルには無効です。

EXTEND
ファイルを追加またはファイルを作成する出力操作を実行できます。

EXTEND 句を順次アクセス・ファイルで使用できるのは、新規データが昇順で作成されている場合だけです。EXTEND 句は、LINAGE 節が指定されたファイルで使用可能です。

QSAM ファイルの場合は、複数のファイル・リールに EXTEND 句を指定 しないでください。

存在するかどうかが不確実なファイルを追加したい場合は、 EXTEND モードでそのファイルをオープンする前に SELECT OPTIONAL 節を使用してください。そのファイルが存在しない場合はファイルが作成され、 既存の場合は OPEN ステートメントに追加されます。

ファイル名-1ファイル名-2ファイル名-3ファイル名-4
OPEN ステートメントによる処理の対象となるファイルを指定します。複数のファイルを指定する場合、それらのファイルは同一の編成やアクセス・モードを持つ必要はありません。各ファイル名は、データ部の FD 項目に定義されていなければならず、また、 ソート・ファイルやマージ・ファイルにすることはできません。FD 項目は、ファイルが定義されるときに提供された情報と同じでなければなりません。
REVERSED
順次単一リール・ファイルに対してのみ有効です。REVERSED は VSAM ファイルには無効です。

例えば、 直接アクセス装置のようにそのストレージ・メディアにリールの概念が意味を成さない場合には、REVERSED 句や NO REWIND 句は適用されません。

NO REWIND
順次単一リール・ファイルに対してのみ有効です。これは VSAM ファイルには無効です。

一般規則

  • INPUT 句を指定してオープンしたファイルがオプション・ファイルであり、 それが使用可能でない場合、OPEN ステートメントは、 オプショナル入力ファイルが使用可能でないことを示すようにファイル位置標識を設定します。
  • OPEN INPUT ステートメントや OPEN I-O ステートメントが実行されると、 ファイル位置標識は、次のように設定されます。
    • 索引ファイルについては、そのファイルに関連する照合シーケンスにおける、 最低の順序位置を持つ文字。
    • 順次ファイルおよび相対ファイルの場合は、1。
  • EXTEND 句を指定する場合は、OPEN ステートメントは、 ファイル位置標識をそのファイルに書き込まれた最後のレコードの直後に位置付けます (最高の第 1 レコード・キー値を持つ (索引ファイルの場合) か、 または相対キー値を持つ (相対ファイルの場合) レコードは、 最後のレコードとみなされます)。それ以後に実行される WRITE は、 そのファイルが OUTPUT としてオープンされているかのように、レコードを追加します。 EXTEND 句を指定できるのは、ファイル作成時ですが、 その他にもレコードが入ったファイル、 または削除されたレコードが入っていたファイルに指定することもできます。
  • VSAM ファイルの場合、ファイル内にレコードが 1 つも存在しないと、ファイル位置標識は、 最初に実行されるフォーマット 1 の READ ステートメントの結果が AT END 条件になるよう設定されます。
  • NO REWIND を指定すると、OPEN ステートメントを実行してもファイルは再度位置付けされません。 OPEN の実行に先立ち、ファイルはその最初に位置付けされなければなりません。 NO REWIND 句が指定されている場合 (または NO REWIND 句と REVERSE 句が両方とも省略されている場合)、 ファイルの位置付けは、DD ステートメントの LABEL パラメーターで指定されます。
  • REVERSED 句を指定して、OPEN ステートメントを実行すると、QSAM ファイルはその終わりに位置付けられます。それ以降の READ ステートメントは、 最後のレコードから開始して逆の順序でデータ・レコードを使用できるようにします。

    OPEN REVERSED を指定する場合は、レコード・フォーマットは固定長でなければなりません。

  • REVERSED 句、NO REWIND 句、または EXTEND 句が指定されていない場合、 OPEN ステートメントの実行は、ファイルをその先頭に位置付けて行われます。

ファイル制御項目で PASSWORD 節を指定している場合、OPEN ステートメントを実行する前に、パスワード・データ項目に、有効なパスワードを入れておく必要があります。有効なパスワードが存在しなければ、OPEN を正しく実行できません。

ラベル・レコード

OPEN ステートメントを実行する時にファイルにラベル・レコードが指定された場合は、以下の標準ラベル規則に従って、ラベルが処理されます。

INPUT ファイル
開始ラベルがチェックされます。
OUTPUT ファイル
開始ラベルが書き込まれます。
I-O ファイル
ラベルがチェックされ、これにより新規ラベルが作成されます。
EXTEND ファイル
以下のプロシージャーが実行されます。
  • これが単一ボリューム・ファイルである場合に限り、開始ファイル・ラベルが処理されます。
  • 最後にある既存ボリュームの開始ボリューム・ラベルは、 そのファイルが INPUT 句を指定してオープンされたかのように処理されます。
  • 既存の終了ファイル・ラベルは、 そのファイルが INPUT 句を指定してオープンされたかのように処理されます。 これらは、次いで削除されます。
  • ファイルは OUTPUT ファイルとしてオープンされたかのように、処理が継続されます。

ラベル・レコードが指定されたにもかかわらずそれが存在しない場合、 または存在するのに指定されていない場合、OPEN ステートメントを実行するとどうなるかは予測できません。

OPEN ステートメントに関する注意事項

  1. OPEN ステートメントが正常に実行されると、そのファイルは使用可能であると判別され、 オープン・モードになります。 DD の割り振りがあり、物理的に存在する QSAM ファイルは使用可能です。 VSAM ファイルは、DD 割り振りがあり、VSAM アクセス方式サービス・プログラムを使用して定義され、さらにレコードが含まれるか、前にレコードが含まれていた場合は使用可能です。 ファイルの使用可能性の詳細については、Enterprise COBOL プログラミング・ガイド」を参照してください。 以下の表は、 使用可能なファイルと使用可能でないファイルに対してオープンを行った結果を示したものです。

    表 1. ファイルの使用可能性
    OPEN の形式 ファイルが 使用可能 ファイルが使用可能でない
    INPUT 通常のオープン オープンに失敗する
    INPUT (オプション・ファイル) 通常のオープン 通常のオープン。最初の読み取りにより、終了条件または無効キー条件が生じる
    I-O 通常のオープン オープンに失敗する
    I-O (オプション・ファイル) 通常のオープン オープンするとファイルが作成される
    OUTPUT 通常のオープン。ファイルにレコードが入っていない。 オープンするとファイルが作成される
    EXTEND 通常のオープン オープンに失敗する
    EXTEND (オプション・ファイル) 通常のオープン オープンするとファイルが作成される
  2. OPEN ステートメントが正常に実行されると、ファイルがオープン状態になり、関連するレコード域はプログラムに対して使用可能になります。
  3. OPEN ステートメントは最初のデータ・レコードを取得または解放しません。
  4. レコード域との間でデータをやり取りできるのは、ファイルがオープン状態になっている場合のみです。
  5. 使用可能な任意の入出力ステートメントを使用する場合も、 その実行前に OPEN ステートメントが正しく実行されていなければなりません (USING 句または GIVING 句付きの SORT や MERGE ステートメントを除く)。 以下の表では、'X' はステートメントが、最上段に示されているオープン・モードで 使用できることを意味しています。

表 2. 順次ファイルで使用可能なステートメント
ステートメント 入力オープン・モード 出力オープン・モード I-O オープン・モード 拡張オープン・モード
READ X   X  
WRITE   X   X
REWRITE     X  

以下の表では、'X' は、その行に示されているアクセス・モードで使用されると、 上段に示されたオープン・モードで使用できることを意味します。

表 3. 索引付きファイルと相対ファイルで使用可能なステートメント
ファイル・アクセス・モード ステートメント 入力オープン・モード 出力オープン・モード I-O オープン・モード 拡張オープン・モード
順次 READ X   X  
WRITE   X   X
REWRITE     X  
START X   X  
DELETE     X  
ランダム READ X   X  
WRITE   X X  
REWRITE     X  
START        
DELETE     X  
動的 READ X   X  
WRITE   X X  
REWRITE     X  
START X   X  
DELETE     X  

以下の表では、'X' はステートメントが、最上段に示されているオープン・モードで 使用できることを意味しています。

表 4. 行順次ファイルで使用可能なステートメント
ステートメント 入力オープン・モード 出力オープン・モード I-O オープン・モード 拡張オープン・モード
READ X      
WRITE   X   X
REWRITE        
  1. 同一プログラムの中で、1 つのファイルを INPUT、OUTPUT、I-O、または EXTEND (順次ファイルおよび行順次ファイルのみ) としてオープンすることができます。 あるファイルに対して最初の OPEN ステートメントを実行した後は、それ以降の OPEN ステ ートメントを実行する度に、その前に、REEL 句または UNIT 句 (QSAM ファイルの み)、または LOCK 句の指定のない CLOSE ファイル・ステートメントをそのファイル に対して正しく実行しておく必要があります。
  2. ファイル制御項目内に FILE STATUS 節が指定されている場合は、 関連するファイル状況キーが、OPEN ステートメントの実行時に更新されます。
  3. すでにオープン状態になっているファイルに対して OPEN ステートメントを発行すると、 そのファイルに対して EXCEPTION/ERROR プロシージャーが指定されていれば、それが実行されます。

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

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