JCL Session 5


Possible DD and DISP parameters if input data is from a catalogued file

//ddname DD DSN=dataset name,DISP=(start_status,normal_end,abend)
 

examples:

//CURRENT DD DSN=CURRENT.FILE(FIRST),DISP=OLD

//OUTDATED DD DSN=LAST.USE.FOR.FILE,DISP=(OLD,DELETE)

//MUSTUSE DD DSN=MUST.USE.BEFORE.DELETE,DISP=(OLD,DELETE,KEEP)
 


Possible DD and DISP parameters if input data is not from a catalogued file

//ddname DD DSN=dataset name,DISP=(start_status,normal_end,abend),
//     UNIT=unit,VOL=SER=volid
 

examples:

//NEWDATA DD DSN=SOMENAME.FIRST,DISP=OLD,
//     UNIT=SYSDA,VOL=SER=WORK01

//OUTDATED DD DSN=LAST.USE.FOR.FILE,DISP=(OLD,DELETE,KEEP),
//     UNIT=TAPE,VOL=SER=012345

//STILGOOD DD DSN=MORE.USE.COMING,DISP=(OLD,CATLG,KEEP),
//     UNIT=DISK,VOL=SER=DISK01
 


Minimum DD parameters for output data directed to an existing cataloged file

//ddname DD DSN=dataset name,DISP=OLD
 

example:

//NEWDATA DD DSN=OLDFILE.FIRST,DISP=OLD <-- previous contents replaced


Minimum DD parameters for output data directed to a new file

//ddname DD DSN=dataset name,
//     DISP=(NEW,CATLG,DELETE),
//     UNIT=unit,
//     SPACE=(units,(primary,secondary,directory_amt),RLSE,CONTIG),
//     DCB=(RECFM=record_fmt,LRECL=record_length,BLKSIZE=blocking_factor)
 

examples:

//NEWFILE DD DSN=NEWFILE,DISP=(NEW,CATLG,DELETE),
//     DCB=(RECFM=FB,LRECL=80,BLKSIZE=4000),
//     UNIT=SYSDA,SPACE=(TRK,(1,1)) <-- sequential data set

//NEWPDS DD DSN=CSCJPH.CSC.CNTL2,DISP=(NEW,CATLG,DELETE),
//     DCB=(RECFM=FB,LRECL=80,BLKSIZE=4000),
//     UNIT=SYSDA,SPACE=(TRK,(2,2,10)) <-- partitioned data set



Parameters for data written to a file which may or may not exist prior to start of step.


//ddname DD DSN=dataset_name, <-- if this dataset exists prior to step,
//             DISP=(MOD,CATLG), <-- new data is added at the end of old contents
//             UNIT=unit,
//             SPACE=(units,(primary,secondary),RLSE,CONTIG),
//             DCB=(RECFM=record_fmt,LRECL=record_length,BLKSIZE=blocking_factor)



Parameters for deleting a dataset which may or may not exist prior to start of step.


//ddname DD DSN=dataset_name,DISP=(MOD,DELETE),
//              UNIT=SYSDA,SPACE=(TRK,0) example:
 
//FILE1 DD DSN=SEQFILE,DISP=(MOD,DELETE),UNIT=SYSDA,SPACE=(TRK,0)

JCL SORT example:

//SORTJOB JOB 1,'BIN 13 -- PETLICKI',MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1   EXEC PGM=SORT
//SORTIN   DD DSN=JPETLIC.CSC.DATA(TESTDATA),DISP=OLD
//SYSIN    DD *
   SORT FIELDS=(1,10,A,11,5,D), FORMAT=CH
//SORTWK01 DD UNIT=SYSDA,SPACE=(TRK,1)
//SORTWK02 DD UNIT=SYSDA,SPACE=(TRK,1)
//SORTWK03 DD UNIT=SYSDA,SPACE=(TRK,1)
//SYSOUT   DD SYSOUT=*
//SORTOUT  DD DSN=JPETLIC.SORTED.DATA,DISP=(NEW,CATLG),
//         UNIT=SYSDA,SPACE=(TRK,(1,1),RLSE),
//         DCB=(RECFM=FB,LRECL=80,BLKSIZE=4000)



JCL MERGE example:


//MERGEJOB JOB 1,'BIN 13 -- PETLICKI',MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1     EXEC PGM=SORT
//SORTIN01   DD DSN=JPETLIC.CSC.DATA(NEWTDATA),DISP=OLD
//SORTIN02   DD DSN=JPETLIC.CSC.DATA(OLDDATA),DISP=OLD
//SORTIN03   DD DSN=JPETLIC.CSC.HISTORY,DISP=OLD
//SYSIN      DD *
  MERGE FIELDS=(1,10,CH,A,11,5,CH,D)
//SYSOUT     DD SYSOUT=*
//SORTOUT    DD SYSOUT=*


SORT/MERGE CONTROL STATEMENT FORMAT (//SYSIN DD)

                            FORMAT 1

SORT FIELDS=(START LOCATION, LENGTH, SEQUENCE,...),FORMAT=format

MERGE FIELDS=(START LOCATION, LENGTH, SEQUENCE,...),FORMAT=format

                            FORMAT 2

SORT FIELDS=(START LOCATION, LENGTH, FORMAT, SEQUENCE,...)

MERGE FIELDS=(START LOCATION, LENGTH, FORMAT, SEQUENCE,...)



DEFINITION OF FIELDS= VARIABLES

START LOCATION - beginning position of the key. The first position on the record is 1.

LENGTH - length of the key.

FORMAT      - CH - for data stored as characters PIC XXX USAGE DISPLAY.
                        - ZD - for numbers stored as zoned decimal. PIC S999 USAGE DISPLAY.
                        - PD - for numbers stored as packed decimal PIC S999 USAGE COMP-3.
                        - BI - for numbers stored as binary PIC S999 USAGE COMP.

SEQUENCE     - A for ascending (low to high)
                          - D for descending (high to low)



//SYSIN DD control card examples:

//SYSIN DD *

    SORT FIELDS=(7,10,A,1,5,D),FORMAT=CH

//SYSIN DD *

    SORT FIELDS=(3,6,CH,A,11,3,BI,D,18,3,ZD,A)

//SYSIN DD *

    MERGE FIELDS=(12,10,CH,A,1,11,CH,A)

Ý

NOTE: Column 1 of the sort or merge control statement is always blank.



Multistep jobstreams - programs execute in series ie. program in first step must
                                       complete before the second program is started.

                                        The steps are interdependent since the program in a step
                                        frequently prepares data for a subsequent program.



A dataset created and catalogued in GENSTEP becomes input to a later step.
-----------------------------------------------------------------------------------------------------------------------------

//CCPT00A1 JOB 1,'BIN 13 -- PETLICKI',MSGCLASS=X,MSGLEVEL=(1,1)
//BR14     EXEC PGM=IEFBR14
//DD1       DD DSN=CCPH00.SORTED.FILE,DISP=(MOD,DELETE),
//          UNIT=SYSDA,SPACE=(TRK,0) <-- to be able to catalogue the dataset later
//*-------------------------------------------------------------
//GENSTEP EXEC PGM=IEBGENER
//SYSIN    DD DUMMY
//SYSUT1   DD DSN=JPETLIC.SAMPDATA,DISP=SHR
//SYSUT2   DD DSN=CCPT00.TEMP1, < -- dataset, will be used by SORTSTEP
//         DISP=(NEW,CATLG,DELETE), < -- so it can be found for the next STEP
//         UNIT=SYSDA,SPACE=(TRK,5),
//         DCB=(RECFM=FB,LRECL=80,BLKSIZE=4000)
//SYSPRINT DD SYSOUT=*
//*-------------------------------------------------------------
//SORTSTEP EXEC PGM=SORT
//SYSIN     DD DSN=JPETLIC.CSC.CNTL(SORTSAMP),DISP=OLD
//SORTIN    DD DSN= CCPT00.TEMP1, < -- input from GENSTEP
//          DISP=(OLD,DELETE,KEEP)
//SORTWK01  DD UNIT=DISK,SPACE=(TRK,1)
//SORTWK02  DD UNIT=DISK,SPACE=(TRK,1)
//SYSOUT    DD SYSOUT=*
//SORTOUT   DD DSN=CCPH00.SORTED.FILE,DISP=(NEW,CATLG,DELETE),
//          DCB=(RECFM=FB,LRECL=80,BLKSIZE=4000),
// UNIT=SYSDA,SPACE=(TRK,(1,1)) <-- sequential data set
//*---------------------------------------------------------------------------------------------------------------------------

SORT EXERCISE (VALUE 25 POINTS)
 

  • First step is an IEFBR14
  • Delete datasets CCP#nn.CSC.SORT1, CCP#nn.CSC.SORT2 and
    CCP#nn.CSC.MERGED
  • Second step is a sort:

  •  
            input is JPETLIC.CSC.CNTL(GRADES1)
            sort by first grade in ascending order, name in descending order
            output to a sequential file called CCP#nn.CSC.SORT1
     
  • Third step is a sort:
  •         input is JPETLIC.CSC.CNTL(GRADES2)
            sort by first grade in ascending order, name in descending order
            output to a sequential file called CCP#nn.CSC.SORT2
     

  • Fourrth step is a merge:
  •         input is CCP#nn.CSC.SORT1 and CCP#nn.CSC.SORT2
            merge by first grade in ascending order, name in descending order
            output is a sequential file CCP#nn.CSC.MERGED

    The job should run successfully with every step having COND CODE = 0000
    and free of NOT CATLG 2 errors. Make sure MSGLEVEL=(1,1) and MSGCLASS = X.