ファイルに EXTERNAL 文節を使用することによって、実行単位内で個別にコンパイルされたプログラムは、 共通のファイルにアクセスすることができます。 これらの EXTERNAL ファイルは、弱エクスポートとして処理されます。 強エクスポートと弱エクスポートについては、「ILE 概念」を参照してください。
EXTERNAL ファイルが複数の ILE COBOL プログラムで定義されている場合、ILE COBOL プログラムのどれか 1 つによってオープンされると、 すべてのプログラムからアクセス可能になります。 同様に、いずれかのプログラムが EXTERNAL ファイルをクローズすると、どのプログラムからもアクセスできないようになります。
複数のモジュール・オブジェクトの複数の ILE COBOL プログラムの場合、EXTERNAL ファイルを宣言している ILE COBOL プログラムが最初に呼び出された時点で実行時整合性検査が行われ、 そのモジュール・オブジェクトの定義と、その他のモジュール・オブジェクトにおいてすでに呼び出されている ILE COBOL プログラムの定義とで整合性があるかどうかが検査されます。 矛盾が検出された場合は、実行時例外メッセージが出されます。
図 59 の例は、EXTERNAL ファイルを使用した場合の利点について示すものです。
次の表に、図 59 の例におけるプログラム (またはサブプログラム) の名前と、その機能を示します。
NAME | 機能 |
---|---|
EF1MAIN | これはメイン・プログラムです。 すべてのサブプログラムを呼び出した後、レコード域の内容を検査します。 |
EF1OPENO | このプログラムは出力用に外部ファイルをオープンし、ファイル状況コードを検査します。 |
EF1WRITE | このプログラムはレコードを外部ファイルに書き込み、ファイル状況コードを検査します。 |
EF1OPENI | このプログラムは入力用に外部ファイルをオープンし、ファイル状況コードを検査します。 |
EF1READ | このプログラムは外部ファイルからレコードを読み取り、ファイル状況コードを検査します。 |
EF1CLOSE | このプログラムは外部ファイルをクローズし、ファイル状況コードを検査します。 |
このサンプル・プログラムは、WORKING-STORAGE SECTION のデータ項目に対しても EXTERNAL 文節を使用します。 この項目は、ファイル状況コードを検査するために使用されます。
5722WDS V5R4M0 060210 LN IBM ILE COBOL CBLGUIDE/EXTLFL ISERIES1 06/02/15 13:11:39 ページ 2
ソ ー ス
STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S コピー名 変更日付
1 000100 IDENTIFICATION DIVISION.
2 000200 PROGRAM-ID. EF1MAIN.
000300*
000400* これは外部ファイル処理を制御する
000500* メイン・プログラムです。
000600*
000700
3 000800 ENVIRONMENT DIVISION.
4 000900 INPUT-OUTPUT SECTION.
5 001000 FILE-CONTROL.
6 001100 SELECT EF1
7 001200 ASSIGN TO DISK-EFILE1
8 001300 FILE STATUS IS EFS1
9 001400 ORGANIZATION IS SEQUENTIAL.
001500
10 001600 DATA DIVISION.
11 001700 FILE SECTION.
12 001800 FD EF1 IS EXTERNAL
001900 RECORD CONTAINS 80 CHARACTERS.
13 002000 01 EF-RECORD-1.
14 002100 05 EF-ITEM-1 PIC X(80).
002200
15 002300 WORKING-STORAGE SECTION.
16 002400 01 EFS1 PIC 99 EXTERNAL.
002500
17 002600 PROCEDURE DIVISION.
002700 EF1MAIN-PROGRAM SECTION.
002800 MAINLINE.
18 002900 CALL "EF1OPENO"
19 003000 CALL "EF1WRITE"
20 003100 CALL "EF1CLOSE"
21 003200 CALL "EF1OPENI"
22 003300 CALL "EF1READ"
23 003400 IF EF-RECORD-1 = "First Record" THEN
24 003500 DISPLAY "First record correct"
003600 ELSE
25 003700 DISPLAY "First record incorrect"
26 003800 DISPLAY "Expected: First Record"
27 003900 DISPLAY "Found: " EF-RECORD-1
004000 END-IF
28 004100 CALL "EF1CLOSE"
29 004200 GOBACK.
30 004300 END PROGRAM EF1MAIN.
004400
004600
* * * * * ソ ー ス 仕 様 の 終 わ り * * * * *
5722WDS V5R4M0 060210 LN IBM ILE COBOL CBLGUIDE/EXTLFL ISERIES1 06/02/15 13:11:39 ページ 5
ソ ー ス
STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S コピー名 変更日付
1 004700 IDENTIFICATION DIVISION.
2 004800 PROGRAM-ID. EF1OPENO.
004900*
005000* このプログラムは出力用に外部ファイルをオープンします。
005100*
005200
3 005300 ENVIRONMENT DIVISION.
4 005400 INPUT-OUTPUT SECTION.
5 005500 FILE-CONTROL.
6 005600 SELECT EF1
7 005700 ASSIGN TO DISK-EFILE1
8 005800 FILE STATUS IS EFS1
9 005900 ORGANIZATION IS SEQUENTIAL.
006000
10 006100 DATA DIVISION.
11 006200 FILE SECTION.
12 006300 FD EF1 IS EXTERNAL
006400 RECORD CONTAINS 80 CHARACTERS.
13 006500 01 EF-RECORD-1.
14 006600 05 EF-ITEM-1 PIC X(80).
006700
15 006800 WORKING-STORAGE SECTION.
16 006900 01 EFS1 PIC 99 EXTERNAL.
007000
17 007100 PROCEDURE DIVISION.
007200 EF1OPENO-PROGRAM SECTION.
007300 MAINLINE.
18 007400 OPEN OUTPUT EF1
19 007500 IF EFS1 NOT = 0 THEN
20 007600 DISPLAY "File Status " EFS1 " on OPEN OUTPUT"
21 007700 STOP RUN
007800 END-IF
22 007900 GOBACK.
23 008000 END PROGRAM EF1OPENO.
008100
008300
* * * * * ソ ー ス 仕 様 の 終 わ り * * * * *
5722WDS V5R4M0 060210 LN IBM ILE COBOL CBLGUIDE/EXTLFL ISERIES1 06/02/15 13:11:39 ページ 8
ソ ー ス
STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S コピー名 変更日付
1 008400 IDENTIFICATION DIVISION.
2 008500 PROGRAM-ID. EF1WRITE.
008600*
008700* このプログラムはレコードを外部ファイルに書き込みます。
008800*
008900
3 009000 ENVIRONMENT DIVISION.
4 009100 INPUT-OUTPUT SECTION.
5 009200 FILE-CONTROL.
6 009300 SELECT EF1
7 009400 ASSIGN TO DISK-EFILE1
8 009500 FILE STATUS IS EFS1
9 009600 ORGANIZATION IS SEQUENTIAL.
009700
10 009800 DATA DIVISION.
11 009900 FILE SECTION.
12 010000 FD EF1 IS EXTERNAL
010100 RECORD CONTAINS 80 CHARACTERS.
13 010200 01 EF-RECORD-1.
14 010300 05 EF-ITEM-1 PIC X(80).
010400
15 010500 WORKING-STORAGE SECTION.
16 010600 01 EFS1 PIC 99 EXTERNAL.
010700
17 010800 PROCEDURE DIVISION.
010900 EF1WRITE-PROGRAM SECTION.
011000 MAINLINE.
18 011100 MOVE "First record" TO EF-RECORD-1
19 011200 WRITE EF-RECORD-1
20 011300 IF EFS1 NOT = 0 THEN
21 011400 DISPLAY "File Status " EFS1 " on WRITE"
22 011500 STOP RUN
011600 END-IF
23 011700 GOBACK.
24 011800 END PROGRAM EF1WRITE.
011900
012100
* * * * * ソ ー ス 仕 様 の 終 わ り * * * * *
5722WDS V5R4M0 060210 LN IBM ILE COBOL CBLGUIDE/EXTLFL ISERIES1 06/02/15 13:11:39 ページ 11
ソ ー ス
STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S コピー名 変更日付
1 012200 IDENTIFICATION DIVISION.
2 012300 PROGRAM-ID. EF1OPENI.
012400*
012500* このプログラムは入力用に外部ファイルをオープンします。
012600*
012700
3 012800 ENVIRONMENT DIVISION.
4 012900 INPUT-OUTPUT SECTION.
5 013000 FILE-CONTROL.
6 013100 SELECT EF1
7 013200 ASSIGN TO DISK-EFILE1
8 013300 FILE STATUS IS EFS1
9 013400 ORGANIZATION IS SEQUENTIAL.
013500
10 013600 DATA DIVISION.
11 013700 FILE SECTION.
12 013800 FD EF1 IS EXTERNAL
013900 RECORD CONTAINS 80 CHARACTERS.
13 014000 01 EF-RECORD-1.
14 014100 05 EF-ITEM-1 PIC X(80).
014200
15 014300 WORKING-STORAGE SECTION.
16 014400 01 EFS1 PIC 99 EXTERNAL.
014500
17 014600 PROCEDURE DIVISION.
014700 EF1OPENI-PROGRAM SECTION.
014800 MAINLINE.
18 014900 OPEN INPUT EF1
19 015000 IF EFS1 NOT = 0 THEN
20 015100 DISPLAY "File Status " EFS1 " on OPEN INPUT"
21 015200 STOP RUN
015300 END-IF
22 015400 GOBACK.
23 015500 END PROGRAM EF1OPENI.
015600
015800
* * * * * ソ ー ス 仕 様 の 終 わ り * * * * *
5722WDS V5R4M0 060210 LN IBM ILE COBOL CBLGUIDE/EXTLFL ISERIES1 06/02/15 13:11:39 ページ 14
ソ ー ス
STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S コピー名 変更日付
1 015900 IDENTIFICATION DIVISION.
2 016000 PROGRAM-ID. EF1READ.
016100*
016200* このプログラムは外部ファイルからレコードを読み取ります。
016300*
016400
3 016500 ENVIRONMENT DIVISION.
4 016600 INPUT-OUTPUT SECTION.
5 016700 FILE-CONTROL.
6 016800 SELECT EF1
7 016900 ASSIGN TO DISK-EFILE1
8 017000 FILE STATUS IS EFS1
9 017100 ORGANIZATION IS SEQUENTIAL.
017200
10 017300 DATA DIVISION.
11 017400 FILE SECTION.
12 017500 FD EF1 IS EXTERNAL
017600 RECORD CONTAINS 80 CHARACTERS.
13 017700 01 EF-RECORD-1.
14 017800 05 EF-ITEM-1 PIC X(80).
017900
15 018000 WORKING-STORAGE SECTION.
16 018100 01 EFS1 PIC 99 EXTERNAL.
018200
17 018300 PROCEDURE DIVISION.
018400 EF1READ-PROGRAM SECTION.
018500 MAINLINE.
18 018600 READ EF1
19 018700 IF EFS1 NOT = 0 THEN
20 018800 DISPLAY "File Status " EFS1 " on READ"
21 018900 STOP RUN
019000 END-IF
22 019100 GOBACK.
23 019200 END PROGRAM EF1READ.
019300
019500
* * * * * ソ ー ス 仕 様 の 終 わ り * * * * *
5722WDS V5R4M0 060210 LN IBM ILE COBOL CBLGUIDE/EXTLFL ISERIES1 06/02/15 13:11:39 ページ 17
ソ ー ス
STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S コピー名 変更日付
1 019600 IDENTIFICATION DIVISION.
2 019700 PROGRAM-ID. EF1CLOSE.
019800*
019900* このプログラムは外部ファイルからレコードを読み取ります。
020000*
020100
3 020200 ENVIRONMENT DIVISION.
4 020300 INPUT-OUTPUT SECTION.
5 020400 FILE-CONTROL.
6 020500 SELECT EF1
7 020600 ASSIGN TO DISK-EFILE1
8 020700 FILE STATUS IS EFS1
9 020800 ORGANIZATION IS SEQUENTIAL.
020900
10 021000 DATA DIVISION.
11 021100 FILE SECTION.
12 021200 FD EF1 IS EXTERNAL
021300 RECORD CONTAINS 80 CHARACTERS.
13 021400 01 EF-RECORD-1.
14 021500 05 EF-ITEM-1 PIC X(80).
021600
15 021700 WORKING-STORAGE SECTION.
16 021800 01 EFS1 PIC 99 EXTERNAL.
021900
17 022000 PROCEDURE DIVISION.
022100 EF1CLOSE-PROGRAM SECTION.
022200 MAINLINE.
18 022300 CLOSE EF1
19 022400 IF EFS1 NOT = 0 THEN
20 022500 DISPLAY "File Status " EFS1 " on CLOSE"
21 022600 STOP RUN
022700 END-IF
22 022800 GOBACK.
23 022900 END PROGRAM EF1CLOSE.
023000
023100
* * * * * ソ ー ス 仕 様 の 終 わ り * * * * *
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.