COBOL SORT-MERGE Statement - Quick Reference
The SORT-MERGE statement in COBOL is used to combine multiple sorted input files into a single sorted output file. It maintains the sort order while efficiently merging data from multiple sources.
Primary Use
Merge multiple sorted files into single sorted output
Division
PROCEDURE DIVISION
File Type
Sequential files with SD definition
Performance
Efficient merging of pre-sorted files
Overview
The SORT-MERGE statement is a specialized COBOL feature that combines multiple sorted input files into a single sorted output file. It is designed for scenarios where you have multiple files that are already sorted in the same order and need to be combined into one file. SORT-MERGE maintains the sort order while efficiently processing multiple input streams.
Syntax
123456SORT-MERGE sort-merge-file-name ON ASCENDING KEY merge-key-1 [merge-key-2 ...] ON DESCENDING KEY merge-key-3 [merge-key-4 ...] USING input-file-1 [input-file-2 ...] GIVING output-file-1 [output-file-2 ...] [OUTPUT PROCEDURE procedure-name-1 [THROUGH procedure-name-2]]
Practical Examples
Basic SORT-MERGE Operation
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051* Basic SORT-MERGE with two input files IDENTIFICATION DIVISION. PROGRAM-ID. BASIC-SORT-MERGE-EXAMPLE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT FILE-1 ASSIGN TO "FILE1.DAT" ORGANIZATION IS SEQUENTIAL. SELECT FILE-2 ASSIGN TO "FILE2.DAT" ORGANIZATION IS SEQUENTIAL. SELECT MERGED-FILE ASSIGN TO "MERGED.DAT" ORGANIZATION IS SEQUENTIAL. SELECT SORT-MERGE-WORK ASSIGN TO "SORTWORK". DATA DIVISION. FILE SECTION. SD SORT-MERGE-WORK. 01 SORT-MERGE-RECORD. 05 MERGE-CUSTOMER-ID PIC X(10). 05 MERGE-CUSTOMER-NAME PIC X(30). 05 MERGE-BALANCE PIC 9(8)V99. FD FILE-1. 01 FILE-1-RECORD. 05 FILE-1-CUSTOMER-ID PIC X(10). 05 FILE-1-CUSTOMER-NAME PIC X(30). 05 FILE-1-BALANCE PIC 9(8)V99. FD FILE-2. 01 FILE-2-RECORD. 05 FILE-2-CUSTOMER-ID PIC X(10). 05 FILE-2-CUSTOMER-NAME PIC X(30). 05 FILE-2-BALANCE PIC 9(8)V99. FD MERGED-FILE. 01 MERGED-RECORD. 05 MERGED-CUSTOMER-ID PIC X(10). 05 MERGED-CUSTOMER-NAME PIC X(30). 05 MERGED-BALANCE PIC 9(8)V99. PROCEDURE DIVISION. MAIN-LOGIC. * Merge two sorted files by customer ID SORT-MERGE SORT-MERGE-WORK ON ASCENDING KEY MERGE-CUSTOMER-ID USING FILE-1, FILE-2 GIVING MERGED-FILE DISPLAY "Sort-merge completed successfully" STOP RUN.
Explanation: This example demonstrates a basic SORT-MERGE operation that combines two sorted input files (FILE-1 and FILE-2) into a single sorted output file (MERGED-FILE). The merge is performed on the customer ID field in ascending order. Both input files must be pre-sorted by customer ID for the merge to work correctly.
Multi-Key SORT-MERGE Operation
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566* Multi-key SORT-MERGE with mixed ordering IDENTIFICATION DIVISION. PROGRAM-ID. MULTI-KEY-SORT-MERGE-EXAMPLE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT EAST-REGION-FILE ASSIGN TO "EAST.DAT" ORGANIZATION IS SEQUENTIAL. SELECT WEST-REGION-FILE ASSIGN TO "WEST.DAT" ORGANIZATION IS SEQUENTIAL. SELECT SOUTH-REGION-FILE ASSIGN TO "SOUTH.DAT" ORGANIZATION IS SEQUENTIAL. SELECT CONSOLIDATED-FILE ASSIGN TO "CONSOLIDATED.DAT" ORGANIZATION IS SEQUENTIAL. SELECT SORT-MERGE-WORK ASSIGN TO "SORTWORK". DATA DIVISION. FILE SECTION. SD SORT-MERGE-WORK. 01 SORT-MERGE-RECORD. 05 MERGE-REGION PIC X(2). 05 MERGE-DEPARTMENT PIC X(3). 05 MERGE-EMPLOYEE-ID PIC X(6). 05 MERGE-SALARY PIC 9(8)V99. FD EAST-REGION-FILE. 01 EAST-RECORD. 05 EAST-REGION PIC X(2). 05 EAST-DEPARTMENT PIC X(3). 05 EAST-EMPLOYEE-ID PIC X(6). 05 EAST-SALARY PIC 9(8)V99. FD WEST-REGION-FILE. 01 WEST-RECORD. 05 WEST-REGION PIC X(2). 05 WEST-DEPARTMENT PIC X(3). 05 WEST-EMPLOYEE-ID PIC X(6). 05 WEST-SALARY PIC 9(8)V99. FD SOUTH-REGION-FILE. 01 SOUTH-RECORD. 05 SOUTH-REGION PIC X(2). 05 SOUTH-DEPARTMENT PIC X(3). 05 SOUTH-EMPLOYEE-ID PIC X(6). 05 SOUTH-SALARY PIC 9(8)V99. FD CONSOLIDATED-FILE. 01 CONSOLIDATED-RECORD. 05 CONSOLIDATED-REGION PIC X(2). 05 CONSOLIDATED-DEPT PIC X(3). 05 CONSOLIDATED-EMP-ID PIC X(6). 05 CONSOLIDATED-SALARY PIC 9(8)V99. PROCEDURE DIVISION. MAIN-LOGIC. * Merge three region files by region (ascending), department (ascending), salary (descending) SORT-MERGE SORT-MERGE-WORK ON ASCENDING KEY MERGE-REGION ON ASCENDING KEY MERGE-DEPARTMENT ON DESCENDING KEY MERGE-SALARY USING EAST-REGION-FILE, WEST-REGION-FILE, SOUTH-REGION-FILE GIVING CONSOLIDATED-FILE DISPLAY "Multi-key sort-merge completed successfully" STOP RUN.
Explanation: This example demonstrates a multi-key SORT-MERGE operation that combines three region files using multiple sort keys. The merge is performed first by region (ascending), then by department (ascending), and finally by salary (descending) within each department. This creates a consolidated file with employees organized by region and department, with highest-paid employees listed first within each department.
SORT-MERGE with OUTPUT PROCEDURE
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697* SORT-MERGE with OUTPUT PROCEDURE for custom processing IDENTIFICATION DIVISION. PROGRAM-ID. SORT-MERGE-OUTPUT-PROC-EXAMPLE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT DAILY-FILE-1 ASSIGN TO "DAILY1.DAT" ORGANIZATION IS SEQUENTIAL. SELECT DAILY-FILE-2 ASSIGN TO "DAILY2.DAT" ORGANIZATION IS SEQUENTIAL. SELECT SUMMARY-FILE ASSIGN TO "SUMMARY.DAT" ORGANIZATION IS SEQUENTIAL. SELECT SORT-MERGE-WORK ASSIGN TO "SORTWORK". DATA DIVISION. FILE SECTION. SD SORT-MERGE-WORK. 01 SORT-MERGE-RECORD. 05 MERGE-DATE PIC X(8). 05 MERGE-ACCOUNT PIC X(10). 05 MERGE-AMOUNT PIC 9(8)V99. 05 MERGE-TRANSACTION-TYPE PIC X(1). FD DAILY-FILE-1. 01 DAILY-1-RECORD. 05 DAILY-1-DATE PIC X(8). 05 DAILY-1-ACCOUNT PIC X(10). 05 DAILY-1-AMOUNT PIC 9(8)V99. 05 DAILY-1-TRANS-TYPE PIC X(1). FD DAILY-FILE-2. 01 DAILY-2-RECORD. 05 DAILY-2-DATE PIC X(8). 05 DAILY-2-ACCOUNT PIC X(10). 05 DAILY-2-AMOUNT PIC 9(8)V99. 05 DAILY-2-TRANS-TYPE PIC X(1). FD SUMMARY-FILE. 01 SUMMARY-RECORD. 05 SUMMARY-LINE PIC X(80). WORKING-STORAGE SECTION. 01 WS-EOF-FLAG PIC X(1) VALUE 'N'. 01 WS-ACCOUNT-TOTAL PIC 9(10)V99 VALUE ZERO. 01 WS-CURRENT-ACCOUNT PIC X(10) VALUE SPACES. 01 WS-CURRENT-DATE PIC X(8) VALUE SPACES. PROCEDURE DIVISION. MAIN-LOGIC. * Merge daily files with OUTPUT PROCEDURE for account summarization SORT-MERGE SORT-MERGE-WORK ON ASCENDING KEY MERGE-DATE ON ASCENDING KEY MERGE-ACCOUNT USING DAILY-FILE-1, DAILY-FILE-2 OUTPUT PROCEDURE GENERATE-ACCOUNT-SUMMARY DISPLAY "Sort-merge with output procedure completed" STOP RUN. GENERATE-ACCOUNT-SUMMARY. OPEN OUTPUT SUMMARY-FILE PERFORM UNTIL WS-EOF-FLAG = 'Y' RETURN SORT-MERGE-WORK AT END MOVE 'Y' TO WS-EOF-FLAG NOT AT END * Check for account change IF MERGE-ACCOUNT NOT = WS-CURRENT-ACCOUNT * Write account total if not first account IF WS-CURRENT-ACCOUNT NOT = SPACES MOVE WS-ACCOUNT-TOTAL TO SUMMARY-LINE(20:12) MOVE "Account Total: " TO SUMMARY-LINE(1:15) WRITE SUMMARY-RECORD END-IF * Start new account MOVE MERGE-ACCOUNT TO WS-CURRENT-ACCOUNT MOVE ZERO TO WS-ACCOUNT-TOTAL MOVE "Account: " TO SUMMARY-LINE(1:9) MOVE MERGE-ACCOUNT TO SUMMARY-LINE(10:10) WRITE SUMMARY-RECORD END-IF * Add amount to account total ADD MERGE-AMOUNT TO WS-ACCOUNT-TOTAL * Write transaction record MOVE MERGE-DATE TO SUMMARY-LINE(1:8) MOVE MERGE-AMOUNT TO SUMMARY-LINE(20:12) MOVE MERGE-TRANSACTION-TYPE TO SUMMARY-LINE(35:1) WRITE SUMMARY-RECORD END-RETURN END-PERFORM * Write final account total IF WS-CURRENT-ACCOUNT NOT = SPACES MOVE WS-ACCOUNT-TOTAL TO SUMMARY-LINE(20:12) MOVE "Account Total: " TO SUMMARY-LINE(1:15) WRITE SUMMARY-RECORD END-IF CLOSE SUMMARY-FILE.
Explanation: This example demonstrates SORT-MERGE with an OUTPUT PROCEDURE that generates account summaries during the merge output phase. The GENERATE-ACCOUNT-SUMMARY procedure processes merged records and creates a summary report with account totals. It tracks account changes and accumulates transaction amounts, showing how OUTPUT PROCEDURE can be used for custom processing of merged data.
Monthly Consolidation Example
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899* Monthly consolidation of daily transaction files IDENTIFICATION DIVISION. PROGRAM-ID. MONTHLY-CONSOLIDATION-EXAMPLE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT DAILY-FILE-01 ASSIGN TO "DAILY01.DAT" ORGANIZATION IS SEQUENTIAL. SELECT DAILY-FILE-02 ASSIGN TO "DAILY02.DAT" ORGANIZATION IS SEQUENTIAL. SELECT DAILY-FILE-03 ASSIGN TO "DAILY03.DAT" ORGANIZATION IS SEQUENTIAL. SELECT DAILY-FILE-04 ASSIGN TO "DAILY04.DAT" ORGANIZATION IS SEQUENTIAL. SELECT DAILY-FILE-05 ASSIGN TO "DAILY05.DAT" ORGANIZATION IS SEQUENTIAL. SELECT MONTHLY-FILE ASSIGN TO "MONTHLY.DAT" ORGANIZATION IS SEQUENTIAL. SELECT SORT-MERGE-WORK ASSIGN TO "SORTWORK". DATA DIVISION. FILE SECTION. SD SORT-MERGE-WORK. 01 SORT-MERGE-RECORD. 05 MERGE-TRANSACTION-DATE PIC X(8). 05 MERGE-CUSTOMER-ID PIC X(10). 05 MERGE-PRODUCT-CODE PIC X(5). 05 MERGE-QUANTITY PIC 9(5). 05 MERGE-UNIT-PRICE PIC 9(6)V99. 05 MERGE-TOTAL-AMOUNT PIC 9(8)V99. FD DAILY-FILE-01. 01 DAILY-01-RECORD. 05 DAILY-01-DATE PIC X(8). 05 DAILY-01-CUSTOMER PIC X(10). 05 DAILY-01-PRODUCT PIC X(5). 05 DAILY-01-QTY PIC 9(5). 05 DAILY-01-PRICE PIC 9(6)V99. 05 DAILY-01-AMOUNT PIC 9(8)V99. FD DAILY-FILE-02. 01 DAILY-02-RECORD. 05 DAILY-02-DATE PIC X(8). 05 DAILY-02-CUSTOMER PIC X(10). 05 DAILY-02-PRODUCT PIC X(5). 05 DAILY-02-QTY PIC 9(5). 05 DAILY-02-PRICE PIC 9(6)V99. 05 DAILY-02-AMOUNT PIC 9(8)V99. FD DAILY-FILE-03. 01 DAILY-03-RECORD. 05 DAILY-03-DATE PIC X(8). 05 DAILY-03-CUSTOMER PIC X(10). 05 DAILY-03-PRODUCT PIC X(5). 05 DAILY-03-QTY PIC 9(5). 05 DAILY-03-PRICE PIC 9(6)V99. 05 DAILY-03-AMOUNT PIC 9(8)V99. FD DAILY-FILE-04. 01 DAILY-04-RECORD. 05 DAILY-04-DATE PIC X(8). 05 DAILY-04-CUSTOMER PIC X(10). 05 DAILY-04-PRODUCT PIC X(5). 05 DAILY-04-QTY PIC 9(5). 05 DAILY-04-PRICE PIC 9(6)V99. 05 DAILY-04-AMOUNT PIC 9(8)V99. FD DAILY-FILE-05. 01 DAILY-05-RECORD. 05 DAILY-05-DATE PIC X(8). 05 DAILY-05-CUSTOMER PIC X(10). 05 DAILY-05-PRODUCT PIC X(5). 05 DAILY-05-QTY PIC 9(5). 05 DAILY-05-PRICE PIC 9(6)V99. 05 DAILY-05-AMOUNT PIC 9(8)V99. FD MONTHLY-FILE. 01 MONTHLY-RECORD. 05 MONTHLY-DATE PIC X(8). 05 MONTHLY-CUSTOMER PIC X(10). 05 MONTHLY-PRODUCT PIC X(5). 05 MONTHLY-QTY PIC 9(5). 05 MONTHLY-PRICE PIC 9(6)V99. 05 MONTHLY-AMOUNT PIC 9(8)V99. PROCEDURE DIVISION. MAIN-LOGIC. * Consolidate five daily files into monthly file SORT-MERGE SORT-MERGE-WORK ON ASCENDING KEY MERGE-TRANSACTION-DATE ON ASCENDING KEY MERGE-CUSTOMER-ID ON ASCENDING KEY MERGE-PRODUCT-CODE USING DAILY-FILE-01, DAILY-FILE-02, DAILY-FILE-03, DAILY-FILE-04, DAILY-FILE-05 GIVING MONTHLY-FILE DISPLAY "Monthly consolidation completed successfully" STOP RUN.
Explanation: This example demonstrates a practical application of SORT-MERGE for monthly consolidation of daily transaction files. The program merges five daily files (representing different days of the month) into a single monthly file. The merge is performed by transaction date, customer ID, and product code, creating a consolidated view of all transactions for the month in chronological order.
Best Practices and Considerations
Important Considerations
- All input files must be sorted in the same order as merge keys
- Define sort-merge files with SD statements in the FILE SECTION
- Ensure sufficient disk space for sort-merge work files
- Use appropriate merge keys for optimal performance
- Consider using OUTPUT PROCEDURE for custom processing of merged data
Advantages
- Efficient merging of pre-sorted files
- Maintains sort order in output file
- Supports multiple input files
- Uses optimized merge algorithms
- Provides OUTPUT PROCEDURE for custom processing
Limitations
- Requires input files to be pre-sorted
- Needs temporary disk space for work files
- Limited to sequential file processing
- Performance depends on disk I/O speed
- Requires proper file definitions and error handling
Performance Tips
- • Ensure all input files are properly sorted before merging
- • Choose merge keys carefully to minimize processing complexity
- • Use OUTPUT PROCEDURE for custom data processing during merge
- • Monitor disk space for sort-merge work files
- • Consider file sizes and merge performance characteristics
Test Your Knowledge
1. What is the primary purpose of the SORT-MERGE statement in COBOL?
- To sort data in memory
- To merge multiple sorted files into a single sorted output
- To sort programs
- To merge memory
2. In which COBOL division is the SORT-MERGE statement typically used?
- IDENTIFICATION DIVISION
- ENVIRONMENT DIVISION
- DATA DIVISION
- PROCEDURE DIVISION
3. What is the relationship between SORT-MERGE and SORT statements?
- They are the same thing
- SORT-MERGE combines sorted files, SORT sorts unsorted files
- SORT-MERGE is faster than SORT
- SORT-MERGE is obsolete, SORT is modern
4. Can SORT-MERGE be used with unsorted input files?
- Yes, with any files
- No, input files must be sorted
- No, only with indexed files
- Only with specific file types
5. What is the difference between SORT-MERGE and file concatenation?
- They are the same thing
- SORT-MERGE maintains sort order, concatenation does not
- SORT-MERGE is faster than concatenation
- SORT-MERGE is obsolete, concatenation is modern
Related Concepts
SORT Statement
Understanding SORT statements for external sorting operations.
SD Statement
Using SD statements for sort-merge file definitions.
File Processing
Complete guide to file processing in COBOL.
Data Consolidation
Data consolidation and merging techniques.
External Sort Utility
Understanding the COBOL SORT utility.