OPEN ステートメントがまだ実行されていないファイルを参照する GET、PUT、READ、WRITE、LOCATE、REWRITE、 または DELETE ステートメントが実行されると、そのファイルは暗黙にオープンされます。
COPY オプション付きの GET ステートメントが実行されると、COPY オプションで指定したファイル、または出力ファイル SYSPRINT (COPY オプションでファイルの指定を省略したとき) が暗黙にオープンされることがあります。 COPY オプションで指定したファイルが暗黙にオープンされると、STREAM 属性と OUTPUT 属性が暗黙に定義されます。
表 32 は、左欄のステートメントによってファイルが暗黙に オープンされたとき、暗黙に定義される属性を示したものです。
| ステートメント | 暗黙に定義される属性 |
|---|---|
| GET | STREAM、INPUT |
| PUT | STREAM、OUTPUT |
| READ | RECORD、INPUT注 |
| WRITE | RECORD、OUTPUT注 |
| LOCATE | RECORD、OUTPUT、SEQUENTIAL |
| REWRITE | RECORD、UPDATE |
| DELETE | RECORD、UPDATE |
|
注:
UPDATE が明示的に宣言されていない場合に限り、INPUT および OUTPUT が READ および WRITE ステートメントのデフォルト属性になります。 |
|
表 32 のいずれかのステートメントによって ファイルを暗黙にオープンするということは、上記と同じ属性が指定されている ファイルに明示的な OPEN ステートメントを使用することと同じ効果があります。
ファイル宣言内に指定した属性と、ファイルをオープンした結果として暗黙に定義される属性との間に、矛盾があってはなりません。 例えば、INPUT 属性と UPDATE 属性は矛盾しており、UPDATE 属性と STREAM 属性も矛盾しています。
表 32 にリストされたデフォルトの属性が適用される前に、 前述の暗黙の属性が適用されます。 暗黙に定義される属性が矛盾を引き起こすこともあります。 デフォルトの属性が適用されたあとで属性が矛盾していると、UNDEFINEDFILE 条件が起こります。
| 組み合わせ後の属性 | 暗黙に定義される属性 |
|---|---|
| UPDATE | RECORD |
| SEQUENTIAL | RECORD |
| DIRECT | RECORD、KEYED |
| OUTPUT、STREAM | |
| KEYED | RECORD |
次の 2 つの例で、ファイル定数とファイル変数を使用して明示的にオープンし たときに組み合わせられる属性を示します。
declare Listing file stream; open file(Listing) print;
OPEN ステートメントが実行されると、属性が組み合わされて、STREAM と PRINT という属性が付けられます。 暗黙の属性が適用されて、属性は STREAM、PRINT、および OUTPUT となります。 デフォルトが適用されたあとの属性は、STREAM、PRINT、OUTPUT、および EXTERNAL となります。
declare Account file variable,
(Acct1,Acct2) file
output;
Account = Acct1;
open file(Account) print;
Account = Acct2;
open file(Account) record unbuf;
ファイル Acct1 がオープンされて、 その属性 (明示的に宣言された属性と暗黙に定義された属性) は STREAM、 EXTERNAL、PRINT、および OUTPUT になります。 ファイル Acct2 が、RECORD、EXTERNAL、および OUTPUT の各属性を付けてオープンされます。
declare Master file keyed internal;
read file (Master)
into (Master_Record)
keyto(Master_Key);
組み合わせ (READ ステートメントの実行による暗黙オープンのため) 後の属性は、 KEYED、INTERNAL、RECORD、INPUT です ( そのほかに暗黙に定義される属性はありません)。 デフォルトが適用されたあとの属性は、KEYED、INTERNAL、RECORD、INPUT、SEQUENTIAL です。
declare File3 input direct environment( regional(1) )
この宣言は 3 つのファイル属性、INPUT、DIRECT、および ENVIRONMENT を指定します。 その他の暗黙に定義される属性は、FILE (3 つのうちどの属性によっても暗黙に 定義される)、および RECORD と KEYED (DIRECT によって暗黙に定義される) です。 有効範囲は、デフォルトによって EXTERNAL となります。 ENVIRONMENT 属性は、データ・セットが REGIONAL(1) 編成であることを表します。
先の宣言では、必要なすべての属性が DECLARE ステートメントで指定されているか、または暗黙に定義されています。 これらの属性を、OPEN ステートメントで変更 (または無効に) することはできません。
次の例のように宣言しておけば、invntry を別々の目的でオープンすることができます。
declare invntry file;
次の例では、ファイル属性は、先の例の DECLARE ステートメントで 指定された (あるいは暗黙に定義される) 属性と同じになります。
open file (Invntry)
update sequential;
このようにしてオープンされたファイルがクローズされたあとであれば、別の一組の属性を指定して同じファイルをオープンすることができます。 例えば、次の OPEN ステートメントを使用すれば、KEYTO または KEY オプションを使用してレコードを読み取ることができます。
open file (Invntry)
input sequential keyed;
ファイルは SEQUENTIAL であるので、このデータ・セットを順次にアクセスすることも、 さらに、READ ステートメントで KEY オプションを指定すれば直接にアクセスすることもできます。 この種のファイルの場合、READ ステートメントで KEY オプションを指定すれば、指定したレコードが読み取られます。 後続の READ ステートメントで KEY オプションを省略すると、KEY 順の次のレコードから順次に読み取られます。