Using the EXTERNAL clause for files allows separately compiled programs within the run unit to have access to common files. These EXTERNAL files are handled as weak exports. Refer to ILE Concepts for further information about strong and weak exports.
When an EXTERNAL file is defined in multiple ILE COBOL programs, once it is opened by one of these ILE COBOL programs, it is accessible to all of the programs. Similarly, if one of the programs closes the EXTERNAL file, its is no longer accessible by any of the programs.
For multiple ILE COBOL programs in multiple module objects, a runtime consistency check is made the first time the ILE COBOL program declaring a given EXTERNAL file is called to see if the definition in that module object is consistent with the definitions in already called ILE COBOL programs in other module objects. If any inconsistency is found, then a runtime exception message is issued.
The example in Figure 59 shows some of the advantages of using EXTERNAL files:
The following table gives the program (or subprogram) name for the example
in Figure 59 and describes its function.
Table 12. Program Names for Input-Output Using EXTERNAL Files Example
Name | Function |
---|---|
EF1MAIN | This is the main program. It calls all the subprograms and then verifies the contents of a record area. |
EF1OPENO | This program opens the external file for output and checks the File Status Code. |
EF1WRITE | This program writes a record to the external file and checks the File Status Code. |
EF1OPENI | This program opens the external file for input and checks the File Status Code. |
EF1READ | This program reads record from the external file and checks the File Status Code. |
EF1CLOSE | This program closes the external file and checks the File Status Code. |
The sample program also uses the EXTERNAL clause for a data item in the Working-Storage Section. This item is used for checking File Status Codes.
Figure 59. Input-Output Using EXTERNAL Files
5722WDS V5R3M0 030905 LN IBM ILE COBOL CBLGUIDE/EXTLFL ISERIES1 03/09/15 13:11:39 Page 2 S o u r c e STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S COPYNAME CHG DATE 1 000100 IDENTIFICATION DIVISION. 2 000200 PROGRAM-ID. EF1MAIN. 000300* 000400* This is the main program that controls 000500* the external file processing. 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 * * * * * E N D O F S O U R C E * * * * * 5722WDS V5R3M0 030905 LN IBM ILE COBOL CBLGUIDE/EXTLFL ISERIES1 03/09/15 13:11:39 Page 5 S o u r c e STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S COPYNAME CHG DATE 1 004700 IDENTIFICATION DIVISION. 2 004800 PROGRAM-ID. EF1OPENO. 004900* 005000* This program opens the external file for output. 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 * * * * * E N D O F S O U R C E * * * * * 5722WDS V5R3M0 030905 LN IBM ILE COBOL CBLGUIDE/EXTLFL ISERIES1 03/09/15 13:11:39 Page 8 S o u r c e STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S COPYNAME CHG DATE 1 008400 IDENTIFICATION DIVISION. 2 008500 PROGRAM-ID. EF1WRITE. 008600* 008700* This program writes a record to the external file. 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 * * * * * E N D O F S O U R C E * * * * * 5722WDS V5R3M0 030905 LN IBM ILE COBOL CBLGUIDE/EXTLFL ISERIES1 03/09/15 13:11:39 Page 11 S o u r c e STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S COPYNAME CHG DATE 1 012200 IDENTIFICATION DIVISION. 2 012300 PROGRAM-ID. EF1OPENI. 012400* 012500* This program opens the external file for input. 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 * * * * * E N D O F S O U R C E * * * * * 5722WDS V5R3M0 030905 LN IBM ILE COBOL CBLGUIDE/EXTLFL ISERIES1 03/09/15 13:11:39 Page 14 S o u r c e STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S COPYNAME CHG DATE 1 015900 IDENTIFICATION DIVISION. 2 016000 PROGRAM-ID. EF1READ. 016100* 016200* This program reads a record from the external file. 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 * * * * * E N D O F S O U R C E * * * * * 5722WDS V5R3M0 030905 LN IBM ILE COBOL CBLGUIDE/EXTLFL ISERIES1 03/09/15 13:11:39 Page 17 S o u r c e STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S COPYNAME CHG DATE 1 019600 IDENTIFICATION DIVISION. 2 019700 PROGRAM-ID. EF1CLOSE. 019800* 019900* This program reads a record from the external file. 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 * * * * * E N D O F S O U R C E * * * * * |
(C) Copyright IBM Corporation 1992, 2005. All Rights Reserved.