skip to content

JCL Quick Reference

Job Control Language syntax, common statements, EXEC, DD, and SYSOUT patterns.

2 min read 8 snippets 3d ago

JCL Quick Reference#

Basic job structure#

//MYJOB    JOB (ACCT),'Jay Aharan',CLASS=A,
//             MSGCLASS=X,MSGLEVEL=(1,1),
//             NOTIFY=&SYSUID
//*
//* Simple one-step job
//*
//STEP01   EXEC PGM=IEFBR14
//STEP02   EXEC PGM=IDCAMS
//SYSIN    DD *
  LISTCAT ENTRIES(MY.DATA.SET) ALL
/*
//SYSPRINT DD SYSOUT=*

Common statements#

JOB statement#

//jobname  JOB accounting-info,
//             programmer-name,
//             CLASS=job-class,
//             MSGCLASS=output-class,
//             MSGLEVEL=(statements,messages),
//             NOTIFY=&SYSUID,
//             REGION=0M,
//             TIME=1440

EXEC statement#

//stepname EXEC PGM=program-name
//stepname EXEC PGM=IKJEFT01,DYNAMNBR=30   (* TSO in batch *)
//stepname EXEC PROC=procname
//stepname EXEC procname,PARM.step='options'

DD statement patterns#

//* Sequential dataset
//INFILE   DD DSN=MY.INPUT.FILE,
//             DISP=SHR

//* New dataset
//OUTFILE  DD DSN=MY.OUTPUT.FILE,
//             DISP=(NEW,CATLG,DELETE),
//             SPACE=(CYL,(10,5)),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=0),
//             UNIT=SYSDA

//* PDS member
//SYSIN    DD DSN=MY.PROC.LIB(MYMEMBER),DISP=SHR

//* Inline data
//SYSIN    DD *
  data here
/*

//* Sysout
//SYSPRINT DD SYSOUT=*
//SYSOUT   DD SYSOUT=A

//* Dummy (discard)
//SYSIN    DD DUMMY

//* GDG (Generation Data Group)
//INFILE   DD DSN=MY.GDG.FILE(0),DISP=SHR    (* current *)
//INFILE   DD DSN=MY.GDG.FILE(-1),DISP=SHR   (* previous *)
//OUTFILE  DD DSN=MY.GDG.FILE(+1),
//             DISP=(NEW,CATLG,DELETE),...

DISP parameter#

DISP=(status, normal-end, abnormal-end)

Status:       NEW SHR OLD MOD
Normal-end:   KEEP DELETE CATLG UNCATLG PASS
Abnormal-end: KEEP DELETE CATLG UNCATLG

IEFBR14 β€” do nothing#

//ALLOC    EXEC PGM=IEFBR14
//NEWDS    DD DSN=MY.NEW.DATASET,
//             DISP=(NEW,CATLG,DELETE),
//             SPACE=(CYL,(5,2)),
//             DCB=(RECFM=FB,LRECL=80),
//             UNIT=SYSDA

IDCAMS β€” VSAM utility#

//IDCAMS   EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
  DEFINE CLUSTER -
    (NAME(MY.VSAM.KSDS) -
     RECORDS(1000 100) -
     KEYS(10 0) -
     RECORDSIZE(80 80)) -
    DATA(NAME(MY.VSAM.KSDS.DATA)) -
    INDEX(NAME(MY.VSAM.KSDS.INDEX))
  IF LASTCC = 0 THEN DO
    REPRO INFILE(INDD) OUTFILE(OUTDD)
  END
  DELETE MY.OLD.DATASET PURGE
/*

SET, IF/THEN/ELSE, COND#

//         SET MYVAR=VALUE

//STEP02   EXEC PGM=MYPGM,
//             COND=(0,NE,STEP01)    (* skip if STEP01 RC != 0 *)

// IF (STEP01.RC = 0) THEN
//GOOD     EXEC PGM=GOODPATH
// ELSE
//BAD      EXEC PGM=ERRPATH
// ENDIF