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.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586*> 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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196*> 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".
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464IDENTIFICATION 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".