MainframeMaster

COBOL Tutorial

COBOL ORGANIZATION

The ORGANIZATION clause in COBOL represents comprehensive file structure specification capabilities and sophisticated data organization management functionality within mainframe programming environments, providing advanced file organization mechanisms for data storage, enhanced access method control features, and intelligent record management patterns that enable precise file structure control, complex data organization workflows, and systematic file access requirements while maintaining data integrity, ensuring optimal performance characteristics, and enabling flexible file architectures across enterprise applications requiring specific file organization methods, efficient data access capabilities, and reliable file management throughout sophisticated business data processing scenarios and high-volume file operations.

ORGANIZATION Types and Syntax

File Organization Specifications
cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
*> Sequential file organization SELECT CUSTOMER-FILE ASSIGN TO "CUSTOMER.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-FILE-STATUS. *> Indexed file organization SELECT EMPLOYEE-FILE ASSIGN TO "EMPLOYEE.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS EMP-ID ALTERNATE RECORD KEY IS EMP-SSN WITH DUPLICATES FILE STATUS IS WS-EMP-STATUS. *> Relative file organization SELECT INVENTORY-FILE ASSIGN TO "INVENTORY.DAT" ORGANIZATION IS RELATIVE ACCESS MODE IS RANDOM RELATIVE KEY IS WS-RECORD-NUMBER FILE STATUS IS WS-INV-STATUS. *> Line sequential organization (text files) SELECT REPORT-FILE ASSIGN TO "REPORT.TXT" ORGANIZATION IS LINE SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-REPORT-STATUS. *> File control examples with different organizations FILE-CONTROL. *> Customer master file - Sequential SELECT CUSTOMER-MASTER ASSIGN TO "CUSTMAST.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. *> Product catalog - Indexed by product code SELECT PRODUCT-CATALOG ASSIGN TO "PRODUCTS.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS PRODUCT-CODE ALTERNATE RECORD KEY IS PRODUCT-NAME ALTERNATE RECORD KEY IS SUPPLIER-CODE WITH DUPLICATES. *> Transaction log - Sequential with time-based access SELECT TRANSACTION-LOG ASSIGN TO "TRANSLOG.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. *> Account lookup - Relative file for fast access SELECT ACCOUNT-LOOKUP ASSIGN TO "ACCOUNTS.DAT" ORGANIZATION IS RELATIVE ACCESS MODE IS DYNAMIC RELATIVE KEY IS WS-ACCOUNT-SLOT. *> Complex organization with multiple access methods SELECT SALES-HISTORY ASSIGN TO "SALESHISTORY.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS SALES-KEY ALTERNATE RECORD KEY IS SALES-DATE-KEY ALTERNATE RECORD KEY IS CUSTOMER-KEY WITH DUPLICATES ALTERNATE RECORD KEY IS PRODUCT-KEY WITH DUPLICATES ALTERNATE RECORD KEY IS REGION-KEY WITH DUPLICATES FILE STATUS IS WS-SALES-STATUS. 01 SALES-KEY. 05 SALES-YEAR PIC 9(4). 05 SALES-MONTH PIC 9(2). 05 SALES-SEQUENCE PIC 9(6). 01 SALES-DATE-KEY PIC 9(8). 01 CUSTOMER-KEY PIC X(10). 01 PRODUCT-KEY PIC X(12). 01 REGION-KEY PIC X(5).
File Structure
Access Methods
Data Organization

Organization-Specific Operations

Sequential Organization
cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
*> Sequential file processing FD CUSTOMER-SEQUENTIAL. 01 CUSTOMER-RECORD. 05 CUST-ID PIC 9(8). 05 CUST-NAME PIC X(30). 05 CUST-ADDRESS PIC X(50). 05 CUST-BALANCE PIC S9(9)V99. *> Sequential read processing OPEN INPUT CUSTOMER-SEQUENTIAL PERFORM UNTIL END-OF-FILE READ CUSTOMER-SEQUENTIAL AT END SET END-OF-FILE TO TRUE NOT AT END PERFORM PROCESS-CUSTOMER END-READ END-PERFORM CLOSE CUSTOMER-SEQUENTIAL. *> Sequential write processing OPEN OUTPUT CUSTOMER-SEQUENTIAL PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > MAX-CUSTOMERS MOVE WS-COUNTER TO CUST-ID PERFORM BUILD-CUSTOMER-DATA WRITE CUSTOMER-RECORD ADD 1 TO RECORDS-WRITTEN END-PERFORM CLOSE CUSTOMER-SEQUENTIAL.
Indexed Organization
cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
*> Indexed file processing FD EMPLOYEE-INDEXED. 01 EMPLOYEE-RECORD. 05 EMP-ID PIC 9(8). 05 EMP-SSN PIC 9(9). 05 EMP-NAME PIC X(30). 05 EMP-DEPARTMENT PIC X(15). 05 EMP-SALARY PIC 9(7)V99. *> Random access by key MOVE 12345678 TO EMP-ID READ EMPLOYEE-INDEXED INVALID KEY DISPLAY "Employee not found" NOT INVALID KEY DISPLAY "Employee: " EMP-NAME DISPLAY "Salary: " EMP-SALARY END-READ. *> Sequential processing of indexed file START EMPLOYEE-INDEXED KEY IS GREATER THAN EMP-ID INVALID KEY DISPLAY "No records to process" END-START PERFORM UNTIL END-OF-EMPLOYEES READ EMPLOYEE-INDEXED NEXT AT END SET END-OF-EMPLOYEES TO TRUE NOT AT END PERFORM PROCESS-EMPLOYEE END-READ END-PERFORM.

Comprehensive Organization Examples

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
IDENTIFICATION DIVISION. PROGRAM-ID. ORGANIZATION-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. *> Sequential customer file SELECT CUSTOMER-SEQ-FILE ASSIGN TO "CUSTOMERS.SEQ" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-CUST-STATUS. *> Indexed employee file SELECT EMPLOYEE-IDX-FILE ASSIGN TO "EMPLOYEES.IDX" ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS EMP-ID ALTERNATE RECORD KEY IS EMP-DEPT WITH DUPLICATES FILE STATUS IS WS-EMP-STATUS. *> Relative inventory file SELECT INVENTORY-REL-FILE ASSIGN TO "INVENTORY.REL" ORGANIZATION IS RELATIVE ACCESS MODE IS DYNAMIC RELATIVE KEY IS WS-ITEM-SLOT FILE STATUS IS WS-INV-STATUS. DATA DIVISION. FILE SECTION. FD CUSTOMER-SEQ-FILE. 01 CUSTOMER-RECORD. 05 CUST-ID PIC 9(8). 05 CUST-NAME PIC X(30). 05 CUST-TYPE PIC X(10). 05 CUST-BALANCE PIC S9(9)V99. FD EMPLOYEE-IDX-FILE. 01 EMPLOYEE-RECORD. 05 EMP-ID PIC 9(8). 05 EMP-NAME PIC X(30). 05 EMP-DEPT PIC X(15). 05 EMP-SALARY PIC 9(7)V99. 05 EMP-HIRE-DATE PIC 9(8). FD INVENTORY-REL-FILE. 01 INVENTORY-RECORD. 05 ITEM-CODE PIC X(12). 05 ITEM-DESCRIPTION PIC X(40). 05 QUANTITY-ON-HAND PIC 9(7). 05 UNIT-PRICE PIC 9(7)V99. WORKING-STORAGE SECTION. 01 WS-FILE-STATUS-FIELDS. 05 WS-CUST-STATUS PIC XX. 05 WS-EMP-STATUS PIC XX. 05 WS-INV-STATUS PIC XX. 01 WS-CONTROL-FIELDS. 05 WS-ITEM-SLOT PIC 9(6). 05 WS-RECORD-COUNT PIC 9(6) VALUE 0. 05 WS-PROCESS-FLAG PIC X VALUE 'Y'. PROCEDURE DIVISION. MAIN-ORGANIZATION-DEMO. DISPLAY "=== COBOL ORGANIZATION DEMONSTRATION ===" PERFORM DEMONSTRATE-SEQUENTIAL-ORG PERFORM DEMONSTRATE-INDEXED-ORG PERFORM DEMONSTRATE-RELATIVE-ORG PERFORM DEMONSTRATE-MIXED-OPERATIONS DISPLAY "=== ORGANIZATION DEMO COMPLETE ===" STOP RUN. DEMONSTRATE-SEQUENTIAL-ORG. DISPLAY " " DISPLAY "=== SEQUENTIAL ORGANIZATION ===" *> Write sequential records OPEN OUTPUT CUSTOMER-SEQ-FILE PERFORM VARYING WS-RECORD-COUNT FROM 1 BY 1 UNTIL WS-RECORD-COUNT > 5 COMPUTE CUST-ID = 1000 + WS-RECORD-COUNT STRING "CUSTOMER-" WS-RECORD-COUNT DELIMITED BY SIZE INTO CUST-NAME MOVE "STANDARD" TO CUST-TYPE COMPUTE CUST-BALANCE = WS-RECORD-COUNT * 1000.50 WRITE CUSTOMER-RECORD DISPLAY "Written: " CUST-ID " - " CUST-NAME END-PERFORM CLOSE CUSTOMER-SEQ-FILE *> Read sequential records OPEN INPUT CUSTOMER-SEQ-FILE MOVE 0 TO WS-RECORD-COUNT PERFORM UNTIL WS-CUST-STATUS = "10" READ CUSTOMER-SEQ-FILE AT END MOVE "10" TO WS-CUST-STATUS NOT AT END ADD 1 TO WS-RECORD-COUNT DISPLAY "Read: " CUST-ID " - " CUST-NAME END-READ END-PERFORM CLOSE CUSTOMER-SEQ-FILE DISPLAY "Sequential processing completed: " WS-RECORD-COUNT " records". DEMONSTRATE-INDEXED-ORG. DISPLAY " " DISPLAY "=== INDEXED ORGANIZATION ===" *> Create indexed file with records OPEN OUTPUT EMPLOYEE-IDX-FILE PERFORM VARYING WS-RECORD-COUNT FROM 1 BY 1 UNTIL WS-RECORD-COUNT > 8 COMPUTE EMP-ID = 2000 + WS-RECORD-COUNT STRING "EMPLOYEE-" WS-RECORD-COUNT DELIMITED BY SIZE INTO EMP-NAME EVALUATE WS-RECORD-COUNT WHEN 1 THRU 3 MOVE "FINANCE" TO EMP-DEPT WHEN 4 THRU 6 MOVE "IT" TO EMP-DEPT WHEN 7 THRU 8 MOVE "SALES" TO EMP-DEPT END-EVALUATE COMPUTE EMP-SALARY = 50000 + (WS-RECORD-COUNT * 2500) MOVE 20230101 TO EMP-HIRE-DATE WRITE EMPLOYEE-RECORD DISPLAY "Written indexed: " EMP-ID " - " EMP-NAME " (" EMP-DEPT ")" END-PERFORM CLOSE EMPLOYEE-IDX-FILE *> Random access by primary key OPEN I-O EMPLOYEE-IDX-FILE MOVE 2005 TO EMP-ID READ EMPLOYEE-IDX-FILE INVALID KEY DISPLAY "Employee 2005 not found" NOT INVALID KEY DISPLAY "Found by key: " EMP-NAME " in " EMP-DEPT END-READ *> Sequential access by alternate key MOVE "IT" TO EMP-DEPT START EMPLOYEE-IDX-FILE KEY IS EQUAL TO EMP-DEPT INVALID KEY DISPLAY "No IT employees found" NOT INVALID KEY PERFORM UNTIL WS-EMP-STATUS NOT = "00" READ EMPLOYEE-IDX-FILE NEXT AT END MOVE "10" TO WS-EMP-STATUS NOT AT END IF EMP-DEPT = "IT" DISPLAY "IT Employee: " EMP-NAME ELSE MOVE "10" TO WS-EMP-STATUS END-IF END-READ END-PERFORM END-START CLOSE EMPLOYEE-IDX-FILE. DEMONSTRATE-RELATIVE-ORG. DISPLAY " " DISPLAY "=== RELATIVE ORGANIZATION ===" *> Create relative file OPEN OUTPUT INVENTORY-REL-FILE PERFORM VARYING WS-RECORD-COUNT FROM 1 BY 1 UNTIL WS-RECORD-COUNT > 6 COMPUTE WS-ITEM-SLOT = WS-RECORD-COUNT * 10 STRING "ITEM-" WS-RECORD-COUNT DELIMITED BY SIZE INTO ITEM-CODE STRING "DESCRIPTION FOR ITEM " WS-RECORD-COUNT DELIMITED BY SIZE INTO ITEM-DESCRIPTION COMPUTE QUANTITY-ON-HAND = WS-RECORD-COUNT * 100 COMPUTE UNIT-PRICE = WS-RECORD-COUNT * 15.99 WRITE INVENTORY-RECORD DISPLAY "Written to slot " WS-ITEM-SLOT ": " ITEM-CODE END-PERFORM CLOSE INVENTORY-REL-FILE *> Random access by relative record number OPEN INPUT INVENTORY-REL-FILE MOVE 30 TO WS-ITEM-SLOT READ INVENTORY-REL-FILE INVALID KEY DISPLAY "No record at slot 30" NOT INVALID KEY DISPLAY "Found at slot 30: " ITEM-CODE DISPLAY "Quantity: " QUANTITY-ON-HAND END-READ MOVE 50 TO WS-ITEM-SLOT READ INVENTORY-REL-FILE INVALID KEY DISPLAY "No record at slot 50" NOT INVALID KEY DISPLAY "Found at slot 50: " ITEM-CODE END-READ CLOSE INVENTORY-REL-FILE. DEMONSTRATE-MIXED-OPERATIONS. DISPLAY " " DISPLAY "=== MIXED ORGANIZATION OPERATIONS ===" *> Demonstrate combining different organizations DISPLAY "Combining sequential, indexed, and relative access..." *> Read customer from sequential file OPEN INPUT CUSTOMER-SEQ-FILE READ CUSTOMER-SEQ-FILE AT END DISPLAY "No customers available" NOT AT END DISPLAY "Processing customer: " CUST-NAME *> Look up employee by department (indexed) OPEN INPUT EMPLOYEE-IDX-FILE MOVE "FINANCE" TO EMP-DEPT START EMPLOYEE-IDX-FILE KEY IS EQUAL TO EMP-DEPT NOT INVALID KEY READ EMPLOYEE-IDX-FILE NEXT NOT AT END DISPLAY "Assigned employee: " EMP-NAME END-READ END-START CLOSE EMPLOYEE-IDX-FILE *> Check inventory slot (relative) OPEN INPUT INVENTORY-REL-FILE MOVE 20 TO WS-ITEM-SLOT READ INVENTORY-REL-FILE NOT INVALID KEY DISPLAY "Available item: " ITEM-CODE DISPLAY "Price: $" UNIT-PRICE END-READ CLOSE INVENTORY-REL-FILE END-READ CLOSE CUSTOMER-SEQ-FILE DISPLAY "Mixed operations completed successfully".

ORGANIZATION Features and Capabilities

Sequential Organization
  • • Records stored in physical sequence
  • • Sequential access only
  • • Efficient for batch processing
  • • Simple file structure
Indexed Organization
  • • Key-based record access
  • • Primary and alternate keys
  • • Random and sequential access
  • • Complex search capabilities
Relative Organization
  • • Record number-based access
  • • Direct record positioning
  • • Fast random access
  • • Fixed-length records
Line Sequential
  • • Text file processing
  • • Variable-length records
  • • Platform-compatible format
  • • Human-readable content

Related Pages