MainframeMaster

COBOL Tutorial

COBOL ORDER

The ORDER clause in COBOL represents sophisticated data sequencing capabilities and comprehensive sort direction specification functionality within mainframe programming environments, providing advanced ordering mechanisms for file organization, enhanced sort operation control features, and intelligent data arrangement patterns that enable precise sequence control, complex multi-level sorting workflows, and systematic data organization requirements. This clause embodies modern data management principles by supporting comprehensive ordering specifications, enabling sophisticated sort operation architectures, and facilitating precise sequence control requirements while maintaining data integrity, ensuring predictable ordering behavior, and enabling flexible sorting architectures across enterprise applications requiring exact data sequencing, file organization capabilities, and reliable sort operation processing throughout sophisticated business data management scenarios and high-volume sort processing workflows.

ORDER Clause Usage and Syntax

Basic ORDER 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
83
84
85
86
*> Basic ORDER clause syntax SORT work-file ON ASCENDING KEY sort-field-1 ON DESCENDING KEY sort-field-2 ORDER IS ASCENDING *> Default order specification USING input-file GIVING output-file *> ORDER with multiple specifications SORT work-file ON ASCENDING KEY employee-dept ON DESCENDING KEY employee-salary ON ASCENDING KEY employee-name ORDER IS ASCENDING USING employee-input GIVING employee-sorted *> Complex ORDER arrangements 01 EMPLOYEE-RECORD. 05 EMP-DEPARTMENT PIC X(10). 05 EMP-SALARY PIC 9(7)V99. 05 EMP-HIRE-DATE PIC 9(8). 05 EMP-NAME PIC X(30). 05 EMP-ID PIC 9(6). *> Multi-level ORDER specifications SORT EMPLOYEE-WORK-FILE ON DESCENDING KEY EMP-DEPARTMENT ON ASCENDING KEY EMP-SALARY ON DESCENDING KEY EMP-HIRE-DATE ON ASCENDING KEY EMP-NAME ORDER IS ASCENDING USING EMPLOYEE-INPUT-FILE GIVING EMPLOYEE-ORDERED-FILE *> ORDER in file processing 01 SALES-WORK-FILE. 05 SALES-REGION PIC X(5). 05 SALES-AMOUNT PIC 9(9)V99. 05 SALES-DATE PIC 9(8). 05 SALES-REP PIC X(20). SORT SALES-WORK-FILE ON ASCENDING KEY SALES-REGION ON DESCENDING KEY SALES-AMOUNT ORDER IS DESCENDING *> Override default USING SALES-INPUT GIVING SALES-BY-REGION *> ORDER with conditional processing IF SORT-TYPE = "AMOUNT-DESC" SORT SALES-WORK-FILE ON DESCENDING KEY SALES-AMOUNT ON ASCENDING KEY SALES-DATE ORDER IS DESCENDING USING SALES-INPUT GIVING SALES-OUTPUT ELSE SORT SALES-WORK-FILE ON ASCENDING KEY SALES-DATE ON DESCENDING KEY SALES-AMOUNT ORDER IS ASCENDING USING SALES-INPUT GIVING SALES-OUTPUT END-IF *> ORDER in table processing 01 CUSTOMER-TABLE. 05 CUSTOMER-ENTRY OCCURS 1000 TIMES DEPENDING ON CUSTOMER-COUNT ASCENDING KEY IS CUST-ID INDEXED BY CUST-INDEX. 10 CUST-ID PIC 9(8). 10 CUST-NAME PIC X(30). 10 CUST-BALANCE PIC S9(9)V99. 10 CUST-CREDIT-LIMIT PIC 9(9)V99. *> Search with ORDER consideration SEARCH ALL CUSTOMER-ENTRY AT END DISPLAY "Customer not found" WHEN CUST-ID(CUST-INDEX) = SEARCH-CUSTOMER-ID DISPLAY "Customer found in ordered table" DISPLAY "Name: " CUST-NAME(CUST-INDEX) DISPLAY "Balance: " CUST-BALANCE(CUST-INDEX) END-SEARCH
Sort Control
Data Sequencing
File Organization

Advanced ORDER Operations and Patterns

Complex Ordering Scenarios
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
*> Financial data ordering system 01 FINANCIAL-RECORD. 05 ACCOUNT-TYPE PIC X(10). 05 ACCOUNT-NUMBER PIC 9(12). 05 TRANSACTION-DATE PIC 9(8). 05 TRANSACTION-AMOUNT PIC S9(11)V99. 05 TRANSACTION-CODE PIC X(3). 05 BRANCH-CODE PIC X(4). *> Complex financial ORDER processing SORT FINANCIAL-WORK-FILE ON ASCENDING KEY ACCOUNT-TYPE ON ASCENDING KEY ACCOUNT-NUMBER ON DESCENDING KEY TRANSACTION-DATE ON DESCENDING KEY TRANSACTION-AMOUNT ORDER IS ASCENDING INPUT PROCEDURE IS FINANCIAL-INPUT-PROC OUTPUT PROCEDURE IS FINANCIAL-OUTPUT-PROC FINANCIAL-INPUT-PROC. OPEN INPUT FINANCIAL-INPUT-FILE PERFORM UNTIL END-OF-INPUT READ FINANCIAL-INPUT-FILE AT END SET END-OF-INPUT TO TRUE NOT AT END *> Apply business rules before ordering IF ACCOUNT-TYPE = "CHECKING" OR "SAVINGS" IF TRANSACTION-AMOUNT > 10000 PERFORM VALIDATE-LARGE-TRANSACTION END-IF RELEASE FINANCIAL-RECORD END-IF END-READ END-PERFORM CLOSE FINANCIAL-INPUT-FILE. FINANCIAL-OUTPUT-PROC. OPEN OUTPUT FINANCIAL-ORDERED-FILE PERFORM UNTIL NO-MORE-RECORDS RETURN FINANCIAL-WORK-FILE AT END SET NO-MORE-RECORDS TO TRUE NOT AT END *> Process ordered records PERFORM CALCULATE-RUNNING-BALANCE WRITE FINANCIAL-ORDERED-RECORD ADD 1 TO PROCESSED-COUNT END-RETURN END-PERFORM CLOSE FINANCIAL-ORDERED-FILE. *> Inventory management ORDER system 01 INVENTORY-RECORD. 05 ITEM-CATEGORY PIC X(15). 05 ITEM-CODE PIC X(12). 05 QUANTITY-ON-HAND PIC 9(7). 05 REORDER-LEVEL PIC 9(7). 05 UNIT-COST PIC 9(7)V99. 05 SUPPLIER-CODE PIC X(8). 05 LAST-ORDER-DATE PIC 9(8). *> Multi-criteria inventory ORDER SORT INVENTORY-WORK-FILE ON ASCENDING KEY ITEM-CATEGORY ON DESCENDING KEY QUANTITY-ON-HAND ON ASCENDING KEY REORDER-LEVEL ON DESCENDING KEY UNIT-COST ORDER IS ASCENDING USING INVENTORY-INPUT-FILE GIVING INVENTORY-ORDERED-FILE *> ORDER-based reporting system 01 SALES-REPORT-RECORD. 05 SALES-PERIOD PIC 9(6). *> YYYYMM 05 REGION-CODE PIC X(3). 05 PRODUCT-LINE PIC X(10). 05 SALES-AMOUNT PIC 9(11)V99. 05 SALES-UNITS PIC 9(9). 05 SALESPERSON-ID PIC X(8). *> Dynamic ORDER processing based on report type EVALUATE REPORT-TYPE WHEN "REGIONAL" SORT SALES-WORK-FILE ON ASCENDING KEY REGION-CODE ON DESCENDING KEY SALES-AMOUNT ON ASCENDING KEY PRODUCT-LINE ORDER IS ASCENDING USING SALES-INPUT-FILE OUTPUT PROCEDURE IS REGIONAL-REPORT-PROC WHEN "PRODUCT" SORT SALES-WORK-FILE ON ASCENDING KEY PRODUCT-LINE ON DESCENDING KEY SALES-PERIOD ON DESCENDING KEY SALES-AMOUNT ORDER IS ASCENDING USING SALES-INPUT-FILE OUTPUT PROCEDURE IS PRODUCT-REPORT-PROC WHEN "TEMPORAL" SORT SALES-WORK-FILE ON DESCENDING KEY SALES-PERIOD ON ASCENDING KEY REGION-CODE ON DESCENDING KEY SALES-AMOUNT ORDER IS DESCENDING USING SALES-INPUT-FILE OUTPUT PROCEDURE IS TEMPORAL-REPORT-PROC END-EVALUATE *> Customer ranking ORDER system 01 CUSTOMER-RANKING-RECORD. 05 CUSTOMER-ID PIC 9(10). 05 TOTAL-PURCHASES PIC 9(11)V99. 05 PURCHASE-FREQUENCY PIC 9(5). 05 LAST-PURCHASE-DATE PIC 9(8). 05 CREDIT-RATING PIC X(3). 05 CUSTOMER-SEGMENT PIC X(10). *> VIP customer identification ORDER SORT CUSTOMER-WORK-FILE ON DESCENDING KEY TOTAL-PURCHASES ON DESCENDING KEY PURCHASE-FREQUENCY ON DESCENDING KEY LAST-PURCHASE-DATE ORDER IS DESCENDING INPUT PROCEDURE IS CUSTOMER-FILTER-PROC OUTPUT PROCEDURE IS VIP-RANKING-PROC CUSTOMER-FILTER-PROC. OPEN INPUT CUSTOMER-INPUT-FILE PERFORM UNTIL END-OF-CUSTOMERS READ CUSTOMER-INPUT-FILE AT END SET END-OF-CUSTOMERS TO TRUE NOT AT END *> Filter for active customers only IF LAST-PURCHASE-DATE >= LAST-YEAR-DATE AND TOTAL-PURCHASES > MINIMUM-PURCHASE-AMOUNT RELEASE CUSTOMER-RANKING-RECORD ADD 1 TO FILTERED-COUNT END-IF END-READ END-PERFORM CLOSE CUSTOMER-INPUT-FILE. VIP-RANKING-PROC. OPEN OUTPUT VIP-CUSTOMER-FILE MOVE 1 TO VIP-RANK PERFORM UNTIL NO-MORE-CUSTOMERS RETURN CUSTOMER-WORK-FILE AT END SET NO-MORE-CUSTOMERS TO TRUE NOT AT END MOVE VIP-RANK TO CUSTOMER-VIP-RANK PERFORM ASSIGN-VIP-BENEFITS WRITE VIP-CUSTOMER-RECORD ADD 1 TO VIP-RANK *> Limit to top 100 VIP customers IF VIP-RANK > 100 SET NO-MORE-CUSTOMERS TO TRUE END-IF END-RETURN END-PERFORM CLOSE VIP-CUSTOMER-FILE. *> Performance optimization ORDER strategies 01 PERFORMANCE-METRICS. 05 SORT-START-TIME PIC 9(8). 05 SORT-END-TIME PIC 9(8). 05 RECORDS-SORTED PIC 9(9). 05 SORT-EFFICIENCY PIC 9(3)V99. PERFORM-OPTIMIZED-SORT. MOVE FUNCTION CURRENT-DATE(9:8) TO SORT-START-TIME *> Use most efficient ORDER strategy IF RECORD-COUNT < 10000 *> Small dataset - simple ORDER SORT WORK-FILE ON ASCENDING KEY PRIMARY-KEY ORDER IS ASCENDING USING INPUT-FILE GIVING OUTPUT-FILE ELSE *> Large dataset - multi-level ORDER with procedures SORT WORK-FILE ON ASCENDING KEY PRIMARY-KEY ON DESCENDING KEY SECONDARY-KEY ORDER IS ASCENDING INPUT PROCEDURE IS OPTIMIZED-INPUT-PROC OUTPUT PROCEDURE IS OPTIMIZED-OUTPUT-PROC END-IF MOVE FUNCTION CURRENT-DATE(9:8) TO SORT-END-TIME COMPUTE SORT-EFFICIENCY = RECORDS-SORTED / (SORT-END-TIME - SORT-START-TIME) DISPLAY "Sort completed with " SORT-EFFICIENCY " records/second".

Comprehensive ORDER Implementation

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
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
IDENTIFICATION DIVISION. PROGRAM-ID. ORDER-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> Employee management ORDER system 01 EMPLOYEE-PROCESSING. 05 WS-TOTAL-EMPLOYEES PIC 9(6) VALUE 0. 05 WS-PROCESSED-COUNT PIC 9(6) VALUE 0. 05 WS-ERROR-COUNT PIC 9(4) VALUE 0. 05 WS-SORT-STATUS PIC X(20). 05 WS-ORDER-TYPE PIC X(10). 01 WS-EMPLOYEE-RECORD. 05 EMP-ID PIC 9(8). 05 EMP-LAST-NAME PIC X(25). 05 EMP-FIRST-NAME PIC X(20). 05 EMP-DEPARTMENT PIC X(15). 05 EMP-POSITION PIC X(20). 05 EMP-SALARY PIC 9(7)V99. 05 EMP-HIRE-DATE PIC 9(8). 05 EMP-PERFORMANCE-RATING PIC 9V99. 05 EMP-STATUS PIC X(10). *> Sort work file definition SD EMPLOYEE-SORT-FILE. 01 EMPLOYEE-SORT-RECORD. 05 SORT-EMP-ID PIC 9(8). 05 SORT-EMP-LAST-NAME PIC X(25). 05 SORT-EMP-FIRST-NAME PIC X(20). 05 SORT-EMP-DEPARTMENT PIC X(15). 05 SORT-EMP-POSITION PIC X(20). 05 SORT-EMP-SALARY PIC 9(7)V99. 05 SORT-EMP-HIRE-DATE PIC 9(8). 05 SORT-EMP-PERF-RATING PIC 9V99. 05 SORT-EMP-STATUS PIC X(10). *> File definitions FD EMPLOYEE-INPUT-FILE. 01 EMPLOYEE-INPUT-RECORD PIC X(150). FD EMPLOYEE-OUTPUT-FILE. 01 EMPLOYEE-OUTPUT-RECORD PIC X(150). FD EMPLOYEE-REPORT-FILE. 01 EMPLOYEE-REPORT-RECORD PIC X(132). *> Report formatting structures 01 WS-REPORT-HEADERS. 05 WS-HEADER-LINE-1. 10 FILLER PIC X(50) VALUE SPACES. 10 FILLER PIC X(32) VALUE "EMPLOYEE DIRECTORY REPORT". 10 FILLER PIC X(50) VALUE SPACES. 05 WS-HEADER-LINE-2. 10 FILLER PIC X(10) VALUE "EMP ID". 10 FILLER PIC X(26) VALUE "EMPLOYEE NAME". 10 FILLER PIC X(16) VALUE "DEPARTMENT". 10 FILLER PIC X(21) VALUE "POSITION". 10 FILLER PIC X(12) VALUE "SALARY". 10 FILLER PIC X(12) VALUE "HIRE DATE". 10 FILLER PIC X(8) VALUE "RATING". 10 FILLER PIC X(11) VALUE "STATUS". 05 WS-DETAIL-LINE. 10 WS-DETAIL-EMP-ID PIC 9(8). 10 FILLER PIC X(2) VALUE SPACES. 10 WS-DETAIL-NAME PIC X(25). 10 FILLER PIC X(1) VALUE SPACES. 10 WS-DETAIL-DEPT PIC X(15). 10 FILLER PIC X(1) VALUE SPACES. 10 WS-DETAIL-POSITION PIC X(20). 10 FILLER PIC X(1) VALUE SPACES. 10 WS-DETAIL-SALARY PIC $ZZZ,ZZ9.99. 10 FILLER PIC X(1) VALUE SPACES. 10 WS-DETAIL-HIRE PIC 99/99/9999. 10 FILLER PIC X(2) VALUE SPACES. 10 WS-DETAIL-RATING PIC Z.99. 10 FILLER PIC X(2) VALUE SPACES. 10 WS-DETAIL-STATUS PIC X(10). *> Summary statistics 01 WS-DEPARTMENT-STATS. 05 WS-DEPT-TOTALS OCCURS 20 TIMES INDEXED BY DEPT-INDEX. 10 WS-DEPT-NAME PIC X(15). 10 WS-DEPT-COUNT PIC 9(4). 10 WS-DEPT-TOTAL-SAL PIC 9(11)V99. 10 WS-DEPT-AVG-SAL PIC 9(7)V99. 05 WS-DEPT-COUNT-TOTAL PIC 9(2) VALUE 0. PROCEDURE DIVISION. MAIN-ORDER-PROCESSING. DISPLAY "=== COBOL ORDER DEMONSTRATION ===" DISPLAY SPACES PERFORM INITIALIZE-PROCESSING PERFORM DEMONSTRATE-BASIC-ORDER PERFORM DEMONSTRATE-DEPARTMENT-ORDER PERFORM DEMONSTRATE-SALARY-ORDER PERFORM DEMONSTRATE-PERFORMANCE-ORDER PERFORM DEMONSTRATE-COMPLEX-ORDER PERFORM GENERATE-ORDER-STATISTICS DISPLAY "=== ORDER PROCESSING COMPLETE ===" STOP RUN. INITIALIZE-PROCESSING. DISPLAY "Initializing ORDER processing demonstration..." MOVE "ASCENDING" TO WS-ORDER-TYPE MOVE "READY" TO WS-SORT-STATUS MOVE 0 TO WS-TOTAL-EMPLOYEES MOVE 0 TO WS-PROCESSED-COUNT MOVE 0 TO WS-ERROR-COUNT DISPLAY "✅ Initialization complete". DEMONSTRATE-BASIC-ORDER. DISPLAY " " DISPLAY "=== BASIC ORDER DEMONSTRATION ===" DISPLAY "Performing basic employee ID ORDER (ascending)..." SORT EMPLOYEE-SORT-FILE ON ASCENDING KEY SORT-EMP-ID ORDER IS ASCENDING INPUT PROCEDURE IS BASIC-INPUT-PROCEDURE OUTPUT PROCEDURE IS BASIC-OUTPUT-PROCEDURE DISPLAY "✅ Basic ORDER completed" DISPLAY " Records processed: " WS-PROCESSED-COUNT DISPLAY " Order type: " WS-ORDER-TYPE. BASIC-INPUT-PROCEDURE. *> Simulate reading employee records PERFORM VARYING WS-PROCESSED-COUNT FROM 1 BY 1 UNTIL WS-PROCESSED-COUNT > 10 *> Generate sample employee data COMPUTE SORT-EMP-ID = 1000 + WS-PROCESSED-COUNT STRING "EMPLOYEE-" WS-PROCESSED-COUNT DELIMITED BY SIZE INTO SORT-EMP-LAST-NAME STRING "FIRST-" WS-PROCESSED-COUNT DELIMITED BY SIZE INTO SORT-EMP-FIRST-NAME MOVE "IT" TO SORT-EMP-DEPARTMENT MOVE "DEVELOPER" TO SORT-EMP-POSITION COMPUTE SORT-EMP-SALARY = 50000 + (WS-PROCESSED-COUNT * 1000) MOVE 20230101 TO SORT-EMP-HIRE-DATE MOVE 4.5 TO SORT-EMP-PERF-RATING MOVE "ACTIVE" TO SORT-EMP-STATUS RELEASE EMPLOYEE-SORT-RECORD END-PERFORM. BASIC-OUTPUT-PROCEDURE. MOVE 0 TO WS-PROCESSED-COUNT PERFORM UNTIL NO-MORE-RECORDS RETURN EMPLOYEE-SORT-FILE AT END SET NO-MORE-RECORDS TO TRUE NOT AT END ADD 1 TO WS-PROCESSED-COUNT DISPLAY " " WS-PROCESSED-COUNT ": ID " SORT-EMP-ID " - " SORT-EMP-LAST-NAME END-RETURN END-PERFORM. DEMONSTRATE-DEPARTMENT-ORDER. DISPLAY " " DISPLAY "=== DEPARTMENT ORDER DEMONSTRATION ===" DISPLAY "Performing department-based ORDER (ascending dept, descending salary)..." SORT EMPLOYEE-SORT-FILE ON ASCENDING KEY SORT-EMP-DEPARTMENT ON DESCENDING KEY SORT-EMP-SALARY ORDER IS ASCENDING INPUT PROCEDURE IS DEPARTMENT-INPUT-PROCEDURE OUTPUT PROCEDURE IS DEPARTMENT-OUTPUT-PROCEDURE DISPLAY "✅ Department ORDER completed". DEPARTMENT-INPUT-PROCEDURE. *> Generate diverse department data PERFORM VARYING WS-PROCESSED-COUNT FROM 1 BY 1 UNTIL WS-PROCESSED-COUNT > 15 COMPUTE SORT-EMP-ID = 2000 + WS-PROCESSED-COUNT STRING "LASTNAME-" WS-PROCESSED-COUNT DELIMITED BY SIZE INTO SORT-EMP-LAST-NAME STRING "FIRSTNAME-" WS-PROCESSED-COUNT DELIMITED BY SIZE INTO SORT-EMP-FIRST-NAME *> Assign different departments EVALUATE WS-PROCESSED-COUNT WHEN 1 THRU 5 MOVE "FINANCE" TO SORT-EMP-DEPARTMENT MOVE "ANALYST" TO SORT-EMP-POSITION WHEN 6 THRU 10 MOVE "IT" TO SORT-EMP-DEPARTMENT MOVE "DEVELOPER" TO SORT-EMP-POSITION WHEN 11 THRU 15 MOVE "SALES" TO SORT-EMP-DEPARTMENT MOVE "REPRESENTATIVE" TO SORT-EMP-POSITION END-EVALUATE *> Vary salaries within departments COMPUTE SORT-EMP-SALARY = 45000 + (FUNCTION RANDOM * 30000) MOVE 20220615 TO SORT-EMP-HIRE-DATE COMPUTE SORT-EMP-PERF-RATING = 3.0 + (FUNCTION RANDOM * 2.0) MOVE "ACTIVE" TO SORT-EMP-STATUS RELEASE EMPLOYEE-SORT-RECORD END-PERFORM. DEPARTMENT-OUTPUT-PROCEDURE. MOVE 0 TO WS-PROCESSED-COUNT MOVE SPACES TO WS-PREVIOUS-DEPARTMENT PERFORM UNTIL NO-MORE-RECORDS RETURN EMPLOYEE-SORT-FILE AT END SET NO-MORE-RECORDS TO TRUE NOT AT END ADD 1 TO WS-PROCESSED-COUNT *> Display department header when changed IF SORT-EMP-DEPARTMENT NOT = WS-PREVIOUS-DEPARTMENT DISPLAY " 📁 Department: " SORT-EMP-DEPARTMENT MOVE SORT-EMP-DEPARTMENT TO WS-PREVIOUS-DEPARTMENT END-IF DISPLAY " " SORT-EMP-LAST-NAME " - Salary: $" SORT-EMP-SALARY END-RETURN END-PERFORM. DEMONSTRATE-SALARY-ORDER. DISPLAY " " DISPLAY "=== SALARY ORDER DEMONSTRATION ===" DISPLAY "Performing salary-based ORDER (descending salary)..." SORT EMPLOYEE-SORT-FILE ON DESCENDING KEY SORT-EMP-SALARY ON ASCENDING KEY SORT-EMP-LAST-NAME ORDER IS DESCENDING INPUT PROCEDURE IS SALARY-INPUT-PROCEDURE OUTPUT PROCEDURE IS SALARY-OUTPUT-PROCEDURE DISPLAY "✅ Salary ORDER completed". SALARY-INPUT-PROCEDURE. *> Generate salary-focused data PERFORM VARYING WS-PROCESSED-COUNT FROM 1 BY 1 UNTIL WS-PROCESSED-COUNT > 12 COMPUTE SORT-EMP-ID = 3000 + WS-PROCESSED-COUNT STRING "EXEC-" WS-PROCESSED-COUNT DELIMITED BY SIZE INTO SORT-EMP-LAST-NAME STRING "MANAGER-" WS-PROCESSED-COUNT DELIMITED BY SIZE INTO SORT-EMP-FIRST-NAME MOVE "EXECUTIVE" TO SORT-EMP-DEPARTMENT MOVE "MANAGER" TO SORT-EMP-POSITION *> Create varied salary ranges EVALUATE WS-PROCESSED-COUNT WHEN 1 THRU 3 COMPUTE SORT-EMP-SALARY = 120000 + (FUNCTION RANDOM * 50000) WHEN 4 THRU 8 COMPUTE SORT-EMP-SALARY = 80000 + (FUNCTION RANDOM * 30000) WHEN 9 THRU 12 COMPUTE SORT-EMP-SALARY = 50000 + (FUNCTION RANDOM * 20000) END-EVALUATE MOVE 20200301 TO SORT-EMP-HIRE-DATE MOVE 4.2 TO SORT-EMP-PERF-RATING MOVE "ACTIVE" TO SORT-EMP-STATUS RELEASE EMPLOYEE-SORT-RECORD END-PERFORM. SALARY-OUTPUT-PROCEDURE. MOVE 0 TO WS-PROCESSED-COUNT PERFORM UNTIL NO-MORE-RECORDS RETURN EMPLOYEE-SORT-FILE AT END SET NO-MORE-RECORDS TO TRUE NOT AT END ADD 1 TO WS-PROCESSED-COUNT *> Display with ranking DISPLAY " " WS-PROCESSED-COUNT ". " SORT-EMP-LAST-NAME " - $" SORT-EMP-SALARY " (" SORT-EMP-POSITION ")" END-RETURN END-PERFORM. DEMONSTRATE-PERFORMANCE-ORDER. DISPLAY " " DISPLAY "=== PERFORMANCE ORDER DEMONSTRATION ===" DISPLAY "Performing performance-based ORDER (descending rating, ascending name)..." SORT EMPLOYEE-SORT-FILE ON DESCENDING KEY SORT-EMP-PERF-RATING ON ASCENDING KEY SORT-EMP-LAST-NAME ORDER IS DESCENDING INPUT PROCEDURE IS PERFORMANCE-INPUT-PROCEDURE OUTPUT PROCEDURE IS PERFORMANCE-OUTPUT-PROCEDURE DISPLAY "✅ Performance ORDER completed". PERFORMANCE-INPUT-PROCEDURE. *> Generate performance-focused data PERFORM VARYING WS-PROCESSED-COUNT FROM 1 BY 1 UNTIL WS-PROCESSED-COUNT > 8 COMPUTE SORT-EMP-ID = 4000 + WS-PROCESSED-COUNT STRING "PERFORMER-" WS-PROCESSED-COUNT DELIMITED BY SIZE INTO SORT-EMP-LAST-NAME STRING "STAR-" WS-PROCESSED-COUNT DELIMITED BY SIZE INTO SORT-EMP-FIRST-NAME MOVE "SALES" TO SORT-EMP-DEPARTMENT MOVE "SPECIALIST" TO SORT-EMP-POSITION MOVE 65000 TO SORT-EMP-SALARY MOVE 20210915 TO SORT-EMP-HIRE-DATE *> Create performance distribution COMPUTE SORT-EMP-PERF-RATING = 2.0 + (FUNCTION RANDOM * 3.0) MOVE "ACTIVE" TO SORT-EMP-STATUS RELEASE EMPLOYEE-SORT-RECORD END-PERFORM. PERFORMANCE-OUTPUT-PROCEDURE. MOVE 0 TO WS-PROCESSED-COUNT PERFORM UNTIL NO-MORE-RECORDS RETURN EMPLOYEE-SORT-FILE AT END SET NO-MORE-RECORDS TO TRUE NOT AT END ADD 1 TO WS-PROCESSED-COUNT *> Display with performance categories IF SORT-EMP-PERF-RATING >= 4.5 DISPLAY " 🌟 EXCELLENT: " SORT-EMP-LAST-NAME " (Rating: " SORT-EMP-PERF-RATING ")" ELSE IF SORT-EMP-PERF-RATING >= 3.5 DISPLAY " ⭐ GOOD: " SORT-EMP-LAST-NAME " (Rating: " SORT-EMP-PERF-RATING ")" ELSE IF SORT-EMP-PERF-RATING >= 2.5 DISPLAY " 📈 AVERAGE: " SORT-EMP-LAST-NAME " (Rating: " SORT-EMP-PERF-RATING ")" ELSE DISPLAY " 📉 NEEDS IMPROVEMENT: " SORT-EMP-LAST-NAME " (Rating: " SORT-EMP-PERF-RATING ")" END-IF END-RETURN END-PERFORM. DEMONSTRATE-COMPLEX-ORDER. DISPLAY " " DISPLAY "=== COMPLEX MULTI-LEVEL ORDER DEMONSTRATION ===" DISPLAY "Performing complex ORDER: dept(asc), perf(desc), salary(desc), name(asc)..." SORT EMPLOYEE-SORT-FILE ON ASCENDING KEY SORT-EMP-DEPARTMENT ON DESCENDING KEY SORT-EMP-PERF-RATING ON DESCENDING KEY SORT-EMP-SALARY ON ASCENDING KEY SORT-EMP-LAST-NAME ORDER IS ASCENDING INPUT PROCEDURE IS COMPLEX-INPUT-PROCEDURE OUTPUT PROCEDURE IS COMPLEX-OUTPUT-PROCEDURE DISPLAY "✅ Complex ORDER completed". COMPLEX-INPUT-PROCEDURE. *> Generate comprehensive test data PERFORM VARYING WS-PROCESSED-COUNT FROM 1 BY 1 UNTIL WS-PROCESSED-COUNT > 20 COMPUTE SORT-EMP-ID = 5000 + WS-PROCESSED-COUNT STRING "COMPLEX-" WS-PROCESSED-COUNT DELIMITED BY SIZE INTO SORT-EMP-LAST-NAME STRING "MULTI-" WS-PROCESSED-COUNT DELIMITED BY SIZE INTO SORT-EMP-FIRST-NAME *> Distribute across departments COMPUTE WS-DEPT-NUMBER = FUNCTION MOD(WS-PROCESSED-COUNT, 4) EVALUATE WS-DEPT-NUMBER WHEN 0 MOVE "ENGINEERING" TO SORT-EMP-DEPARTMENT MOVE "ENGINEER" TO SORT-EMP-POSITION WHEN 1 MOVE "FINANCE" TO SORT-EMP-DEPARTMENT MOVE "ANALYST" TO SORT-EMP-POSITION WHEN 2 MOVE "MARKETING" TO SORT-EMP-DEPARTMENT MOVE "SPECIALIST" TO SORT-EMP-POSITION WHEN 3 MOVE "OPERATIONS" TO SORT-EMP-DEPARTMENT MOVE "COORDINATOR" TO SORT-EMP-POSITION END-EVALUATE *> Vary salaries and performance COMPUTE SORT-EMP-SALARY = 45000 + (FUNCTION RANDOM * 40000) COMPUTE SORT-EMP-PERF-RATING = 2.0 + (FUNCTION RANDOM * 3.0) MOVE 20190701 TO SORT-EMP-HIRE-DATE MOVE "ACTIVE" TO SORT-EMP-STATUS RELEASE EMPLOYEE-SORT-RECORD END-PERFORM. COMPLEX-OUTPUT-PROCEDURE. MOVE 0 TO WS-PROCESSED-COUNT MOVE SPACES TO WS-PREVIOUS-DEPARTMENT PERFORM UNTIL NO-MORE-RECORDS RETURN EMPLOYEE-SORT-FILE AT END SET NO-MORE-RECORDS TO TRUE NOT AT END ADD 1 TO WS-PROCESSED-COUNT *> Display department sections IF SORT-EMP-DEPARTMENT NOT = WS-PREVIOUS-DEPARTMENT DISPLAY " " DISPLAY " 🏢 " SORT-EMP-DEPARTMENT " DEPARTMENT" DISPLAY " ----------------------------------------" MOVE SORT-EMP-DEPARTMENT TO WS-PREVIOUS-DEPARTMENT END-IF DISPLAY " " SORT-EMP-LAST-NAME " | Rating: " SORT-EMP-PERF-RATING " | Salary: $" SORT-EMP-SALARY END-RETURN END-PERFORM. GENERATE-ORDER-STATISTICS. DISPLAY " " DISPLAY "=== ORDER PROCESSING STATISTICS ===" DISPLAY "📊 Summary of ORDER operations performed:" DISPLAY " ✓ Basic ID-based ORDER (ascending)" DISPLAY " ✓ Department-based ORDER (dept asc, salary desc)" DISPLAY " ✓ Salary-based ORDER (salary desc, name asc)" DISPLAY " ✓ Performance-based ORDER (rating desc, name asc)" DISPLAY " ✓ Complex multi-level ORDER (4 keys)" DISPLAY " " DISPLAY "🎯 Key ORDER Features Demonstrated:" DISPLAY " • ASCENDING and DESCENDING specifications" DISPLAY " • Multi-level sort key combinations" DISPLAY " • INPUT and OUTPUT procedure integration" DISPLAY " • Dynamic ORDER type selection" DISPLAY " • Performance and efficiency considerations" DISPLAY " " DISPLAY "📈 ORDER Benefits Achieved:" DISPLAY " • Structured data presentation" DISPLAY " • Efficient data retrieval patterns" DISPLAY " • Flexible sorting architectures" DISPLAY " • Business logic integration" DISPLAY " • Scalable sort operations".

ORDER Features and Capabilities

Sort Direction Control
  • • ASCENDING order specification
  • • DESCENDING order specification
  • • Mixed direction multi-level sorts
  • • Default order behavior
Multi-Level Ordering
  • • Primary and secondary keys
  • • Complex sort hierarchies
  • • Key precedence management
  • • Flexible sort combinations
File Processing
  • • Sort work file management
  • • Input/Output procedure integration
  • • File organization optimization
  • • Large dataset handling
Business Applications
  • • Report generation ordering
  • • Customer ranking systems
  • • Financial data sequencing
  • • Inventory management sorting

Best Practices

Related Pages