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