MERGE Operator
MERGE Operator (for Experienced)
Summary
For basic information, go through the MERGE Operator (for Beginners)
- Merges one or more input files, processes them, and splits them into one or more output data sets.
- MERGE function allows up to 10 input files.
- Merges the indd files to the outdd files using the DFSORT control statements in xxxxCNTL.
- DFSORT MERGE statement should supply in xxxxCNTL to indicate the control fields for the MERGE.
- The records in each input file should already be sorted as specified by the control field in the DFSORT MERGE statement.
Syntax -
Merging three input files to output file -
//TOOLIN DD *
MERGE FROM(INDD01,INDD02,INDD03) TO(OUTPUT) USING(MERG)
/*
//MERGCNTL DD *
MERGE FIELDS=(starting-position,length,type,ascending/descending)
/*
Merging three input files to two output files -
//TOOLIN DD *
MERGE FROM(INDD01,INDD02,INDD03) USING(MERG)
/*
//MERGCNTL DD *
MERGE FIELDS=(starting-position,length,type,ascending/descending)
OUTFIL FNAMES=OUTDD01,INCLUDE=(starting-position,length,type,EQ,matching-value)
OUTFIL FNAMES=OUTDD02,SAVE
/*

Required Operands
FROM -
- FROM parameter specifies ddname of the input file.
- indd DD statement is mandatory if FROM operand specified.
USING -
- USING operand specifies the first 4-characters of the ddname (xxxxCNTL) for the DFSORT control statement file.
- XXXX name is the user-defined name.
- xxxxCNTL DD statement is mandatory if USING(xxxx) is specified.
- Either TO, USING, or both operands can code at the same time.
Optional Operands
TO -
- TO operand specifies 1 to 10 ddnames of output files.
- outdd DD statement is mandatory if TO operand specified
- Either TO, USING, or both operands can code at the same time.
VSAMTYPE -
- VSAMTYPE operand specifies the record format for a VSAM input file (F or V).
Example -
Scenario - Merges the employee details and separates employee details based on the country code "IN", "US".
INPUT1 - MATEPK.INPUT.PSFILE
BROWSE MATEPK.INPUT.PSFILE Line 00000000 Col 001 080
Command ===> Scroll ===> CSR
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
001 PAWAN MAINFRAME JPM AP IN
002 SRINIVAS TESTING ORACLE TG IN
003 SRIDHAR SAS CG OR US
004 VENKATESH ABAP CSC CA US
005 RAVI HADOOP CTS FL US
006 PRASAD HR INFOSYS MI US
007 RAJA TESTING IBM CA US
******************************** Bottom of Data ********************************
INPUT2 - MATEPK.INPUT.PSFILE4
BROWSE MATEPK.INPUT.PSFILE4 Line 00000000 Col 001 080
Command ===> Scroll ===> CSR
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
008 KUMAR SAP BASIS TCS TN IN
009 RAMESH SAP SD ORACLE MN US
010 RAVINDER SAP ABAP INFOTECH AK US
******************************** Bottom of Data ********************************
JCL -
***************************** Top of Data ******************************
//MATEPKME JOB (123),'MATEPK',CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1),
// NOTIFY=&SYSUID
//*
//STEP01 EXEC PGM=ICETOOL
//INDD01 DD DSN=MATEPK.INPUT.PSFILE,DISP=SHR
//INDD02 DD DSN=MATEPK.INPUT.PSFILE4,DISP=SHR
//OUTDD1 DD DSN=MATEPK.OUTPUT.PSFILE3,
// DISP=(NEW,CATLG,DELETE),VOLUME=SER=DEVHD4,
// SPACE=(TRK,(1,1),RLSE),UNIT=SYSDA,
// DCB=(DSORG=PS,RECFM=FB,LRECL=80,BLKSIZE=800)
//OUTDD2 DD DSN=MATEPK.OUTPUT.PSFILE4,
// DISP=(NEW,CATLG,DELETE),VOLUME=SER=DEVHD4,
// SPACE=(TRK,(1,1),RLSE),UNIT=SYSDA,
// DCB=(DSORG=PS,RECFM=FB,LRECL=80,BLKSIZE=800)
//TOOLIN DD *
MERGE FROM(INDD01,INDD02) USING(CTL1)
/*
//CTL1CNTL DD *
MERGE FIELDS=(1,3,ZD,A)
OUTFIL FNAMES=OUTDD1,INCLUDE(60,2,CH,EQ,C'IN')
OUTFIL FNAMES=OUTDD2,INCLUDE(60,2,CH,EQ,C'US')
/*
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//
**************************** Bottom of Data ****************************
OUTPUT1 - MATEPK.OUTPUT.PSFILE3
BROWSE MATEPK.OUTPUT.PSFILE3 Line 00000000 Col 001 080
Command ===> Scroll ===> CSR
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
001 PAWAN MAINFRAME JPM AP IN
002 SRINIVAS TESTING ORACLE TG IN
008 KUMAR SAP BASIS TCS TN IN
******************************** Bottom of Data ********************************
OUTPUT2 - MATEPK.OUTPUT.PSFILE4
BROWSE MATEPK.OUTPUT.PSFILE4 Line 00000000 Col 001 080
Command ===> Scroll ===> CSR
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
003 SRIDHAR SAS CG OR US
004 VENKATESH ABAP CSC CA US
005 RAVI HADOOP CTS FL US
006 PRASAD HR INFOSYS MI US
007 RAJA TESTING IBM CA US
009 RAMESH SAP SD ORACLE MN US
010 RAVINDER SAP ABAP INFOTECH AK US
******************************** Bottom of Data ********************************
TOOLMSG (SDSF SPOOL) - Verify TOOLMSG for the return code of the submitted job.
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9
********************************* TOP OF DATA ********************************************
1ICE600I 0 DFSORT ICETOOL UTILITY RUN STARTED
ICE650I 0 VISIT http://www.ibm.com/storage/dfsort FOR ICETOOL PAPERS, EXAMPLES AND MORE
ICE632I 0 SOURCE FOR ICETOOL STATEMENTS: TOOLIN
ICE630I 0 MODE IN EFFECT: STOP
MERGE FROM(INDD01,INDD02) USING(CTL1)
ICE606I 0 DFSORT CALL 0001 FOR MERGE FROM MERGEIN TO OUTFIL USING CTL1CNTL COMPLETED
ICE602I 0 OPERATION RETURN CODE: 00
ICE601I 0 DFSORT ICETOOL UTILITY RUN ENDED - RETURN CODE: 00
******************************** BOTTOM OF DATA ******************************************
Explaining Solution -
- INDD01,INDD02 - Specifies the ddnames for input files.
- OUTDD1,OUTDD2 - Specifies the ddnames for output files.
- TOOLIN DD * - Specifies the ICETOOL statements for DFSORT.
- CTL1CNTL DD * - Specifies the DFSORT statements for processing.
- TOOLMSG - Specifies where to write the ICETOOL processing messages.
- DFSMSG - Specifies where to write the DFSORT processing messages.
- MERGE FROM(INDD,INDD1) USING(CTL1) - Merges the datasets INDD01, INDD02 based on the CTL1 condition.
- MERGE FIELDS=(1,3,ZD,A) - Merges the records based on the field exists at 1 to 3 colummns.
- OUTFIL FNAMES=OUTDD1,INCLUDE(60,2,CH,EQ,C'IN') - Separates the records which are having "IN" from 60-62 columns and copies them to OUTDD1 dataset.
- OUTFIL FNAMES=OUTDD2,INCLUDE(60,2,CH,EQ,C'US') - Separates the records which are having "US" from 60-62 columns and copies them to OUTDD2 dataset.