Merges multiple input files (MERGE Operator) Example


Scenario -Merges the employee details and separates employee details based on the country code "IN", "US".

INPUT1 - MATEPK.INPUT.PSFILE

----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
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

INPUT2 - MATEPK.INPUT.PSFILE4

----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
008  KUMAR         SAP BASIS           TCS       TN        IN
009  RAMESH        SAP SD              ORACLE    MN        US
010  RAVINDER      SAP ABAP            INFOTECH  AK        US

JCL -

----+----1----+----2----+----3----+----4----+----5----+
//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=*
//

OUTPUT1 - MATEPK.OUTPUT.PSFILE3

----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
001  PAWAN         MAINFRAME           JPM       AP        IN
002  SRINIVAS      TESTING             ORACLE    TG        IN
008  KUMAR         SAP BASIS           TCS       TN        IN

OUTPUT2 - MATEPK.OUTPUT.PSFILE4

----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
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

TOOLMSG (SDSF SPOOL) - Verify TOOLMSG for the return code of the submitted job.

MERGE TOOLMSG

Explaining Example -

  • 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.