Merge
Merge Example
Scenario - Let us assume two different employee files contain employee information, and create one merged file containing all employee details from two files.
EMPREC -
----+----1----+----2----+----3----+----4----+-- 05 EMP-NUM PIC 9(05). 05 FILLER PIC X(05). 05 EMP-NAME PIC X(10). 05 EMP-DESG PIC X(09). 05 FILLER PIC X(01). 05 EMP-SALARY PIC 9(05). 05 FILLER PIC X(12).
Input -
MATEPK.EMPFILE.INPUT1
----+----1----+----2----+----3----+----4----+-- E0001EMPLOYEE1 DIR LOC1 0000100000 E0002EMPLOYEE2 MGR DEPT1LOC1 0000080000 E0004EMPLOYEE4 TL DEPT1LOC1 0000050000 E0006EMPLOYEE6 SE DEPT1LOC1 0000034000
MATEPK.EMPFILE.INPUT2
----+----1----+----2----+----3----+----4----+-- E0003EMPLOYEE3 MGR DEPT2LOC2 0000075000 E0005EMPLOYEE5 SSE DEPT1LOC1 0000045000 E0007EMPLOYEE7 SSE DEPT2LOC2 0000046000
Code -
----+----1----+----2----+----3----+----4----+----5----+
IDENTIFICATION DIVISION.
PROGRAM-ID. MERGEFLS.
AUTHOR. MTH.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMPFILE1 ASSIGN TO INPUT1.
SELECT EMPFILE2 ASSIGN TO INPUT2.
SELECT EMPFILEO ASSIGN TO OUTPUT1.
SELECT WORKFILE ASSIGN TO WORK1.
DATA DIVISION.
FILE SECTION.
* Input File1
FD EMPFILE1
RECORD CONTAINS 47 CHARACTERS
DATA RECORD EMP-REC1
RECORDING MODE F.
01 EMP-REC1.
COPY EMPREC.
* Input File2
FD EMPFILE2
RECORD CONTAINS 47 CHARACTERS
DATA RECORD EMP-REC2
RECORDING MODE F.
01 EMP-REC2.
COPY EMPREC.
* Output file
FD EMPFILEO
RECORD CONTAINS 47 CHARACTERS
DATA RECORD EMP-RECO
RECORDING MODE F.
01 EMP-RECO.
COPY EMPREC.
* Merge work file
SD WORKFILE
RECORD CONTAINS 47 CHARACTERS
DATA RECORD WORK-REC
RECORDING MODE F.
01 WORK-REC.
05 WORK-EMP-NUM PIC 9(05).
05 WORK-REM-REC PIC X(42).
PROCEDURE DIVISION.
MERGE WORKFILE
ON ASCENDING KEY WORK-EMP-NUM
USING EMPFILE1, EMPFILE2
GIVING EMPFILEO.
STOP RUN.
JCL -
//MATEPKRJ JOB MSGLEVEL=(1,1),NOTIFY=&SYSUID //* //STEP01 EXEC PGM=MERGEFLS //STEPLIB DD DSN=MATEPK.COBOL.LOADLIB,DISP=SHR //INPUT1 DD DSN=MATEPK.EMPFILE.INPUT1,DISP=SHR //INPUT2 DD DSN=MATEPK.EMPFILE.INPUT2,DISP=SHR //OUTPUT1 DD DSN=MATEPK.EMPFILE.OUTPUT1, // DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(3,2),RLSE), // UNIT=SYSDA, // DCB=(DSORG=PS,RECFM=FB,LRECL=47,BLKSIZE=470) //WORK1 DD DSN=&&TEMP, // DISP=(NEW,DELETE,DELETE), // SPACE=(CYL,(10,5),RLSE), // UNIT=SYSDA, // DCB=(DSORG=PS,RECFM=FB,LRECL=47,BLKSIZE=470) //SYSOUT DD SYSOUT=*
Output (MATEPK.EMPFILE.OUTPUT1) -
----+----1----+----2----+----3----+----4----+-- E0001EMPLOYEE1 DIR LOC1 0000100000 E0002EMPLOYEE2 MGR DEPT1LOC1 0000080000 E0003EMPLOYEE3 MGR DEPT2LOC2 0000075000 E0004EMPLOYEE4 TL DEPT1LOC1 0000050000 E0005EMPLOYEE5 SSE DEPT1LOC1 0000045000 E0006EMPLOYEE6 SE DEPT1LOC1 0000034000 E0007EMPLOYEE7 SSE DEPT2LOC2 0000046000
Explaining Example -
In the above example:
- MERGE statement merges two sorted input files based on the employee number (1-5 bytes) in both files and writes into the output files.