JCL Instream Procedure
An instream procedure is a type of procedure that is defined within the same JCL where it calls. The instream procedure won't validate syntax errors until an EXEC statement calls it. A maximum of 15 instream procedures can be coded in any job.
Syntax -
Defintion -
//proc-name PROC 
//jcl-statements
//    PENDCalling -
//step-name EXEC proc-name 
or
//step-name EXEC PROC=proc-nameRules -
- Instream procedure can't be coded within another instream procedure.
- Instream procedure allows CNTL, comment, DD, ENDCNTL, EXEC, IF/THEN/ELSE/ENDIF, INCLUDE, OUTPUT JCL, and SET statements only. The instream procedure will not allow any other apart from the above.
- PEND is mandatory while coding the instream procedure.
Default and overrides -
To override a default parameter value on a PROC statement, code the same parameter on the EXEC statement that calls the procedure.
Examples -
Scenario - JCL to create two PS files.
//MTHUSERC JOB (MTH1234),'PAWAN Y',CLASS=B,NOTIFY=&SYSUID
//STEP10   EXEC PGM=IEFBR14
//DD1      DD DSN=MATEPK.IEFBR14.PSFILE1,
//            DISP=(NEW,CATLG,DELETE),
//            SPACE=(TRK,(3,2),RLSE),
//            UNIT=SYSDA,VOLUME=SER=DEVHD4,
//            DCB=(DSORG=PS,RECFM=FB,LRECL=80,BLKSIZE=800)
//STEP20   EXEC PGM=IEFBR14
//DD1      DD DSN=MATEPK.IEFBR14.PSFILE2,
//            DISP=(NEW,CATLG,DELETE), 
//            SPACE=(TRK,(3,2),RLSE),
//            UNIT=SYSDA,VOLUME=SER=DEVHD4,
//            DCB=(DSORG=PS,RECFM=FB,LRECL=80,BLKSIZE=800)Same JCL with instream proc -
//MTHUSERC JOB (MTH1234),'PAWAN Y',CLASS=B,NOTIFY=&SYSUID
//*
//CREATEPS PROC
//STEPA    EXEC PGM=IEFBR14
//SYSPRINT DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SYSDUMP  DD SYSOUT=*
//DD1      DD DSN=&PSNAME,
//            DISP=(NEW,CATLG,DELETE),
//            SPACE=(TRK,(3,2),RLSE),
//            UNIT=SYSDA,VOLUME=SER=DEVHD4,
//            DCB=(DSORG=PS,RECFM=FB,LRECL=80,BLKSIZE=800)
//         PEND
//*
//STEP10   EXEC CREATEPS,PSNAME=MATEPK.IEFBR14.PSFILE1
//STEP20   EXEC CREATEPS,PSNAME=MATEPK.IEFBR14.PSFILE2
//*