Instream Procedure
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
// PEND
Calling -
//step-name EXEC proc-name
or
//step-name EXEC PROC=proc-name
Rules -
- 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
//*