Nested procedures - IBM-JCL

Cataloged and in-stream procedures can invoke other procedures (up to 15 levels of nesting). In a procedure, an EXEC statement can invoke another procedure, which can contain an EXEC statement to invoke another procedure, and so on. Note that an in-stream procedure cannot be defined within another procedure. The sequence PROC, PROC, PEND, PEND is not valid.

Nesting Procedures

The following shows how procedures can be nested:

Procedure C:
//C PROC
//CS1 EXEC PGM=GHI
.
// PEND
Procedure B:
//B PROC
//BS1 EXEC PROC=C
.
//BS2 EXEC PGM=DEF
.
// PEND
Procedure A:
//A PROC
//AS1 EXEC PROC=B
. //AS2 EXEC PGM=ABC
.
// PEND
Job Stream:
//JOB1 JOB
//STEP1 EXEC PROC=A
.
//STEP2 EXEC PGM=JKL
. .

The following statements are equivalent to the nested procedures shown above and show the levels of nesting (scoping) for the procedures.

//JOB1 JOB Level 0
//CS1 EXEC PGM=GHI Level 3
.
//BS2 EXEC PGM=DEF Level 2
.
//AS2 EXEC PGM=ABC Level 1
.
//STEP2 EXEC PGM=JKL Level 0
. .

Modifying Nested Procedures
The rules for modifying OUTPUT JCL and DD statements described apply to nested procedures. In addition, the following rules apply to modifying statements in nested procedures.

  1. Procedure and step names referenced by other statements in the job should be unique within the job.
  2. Modifying or additional JCL statements must appear in the job stream following the EXEC statement for the procedure they are to modify and prior to the next EXEC statement.
  3. Modifying or additional JCL statements apply to one level of nesting only. You can use statements to modify statements in a procedure only for the level of nesting at which the EXEC statement for that procedure appears.
  4. Modifying or additional JCL statements cannot themselves be modified. Do not modify statements that are overrides or additions to a procedure.
  5. Modifying or additional JCL statements can only have procstepname.name or procstepname.ddname in their name field. Do not specify backward references to nested procedures, such as procstepname.procstepname.ddname DD parameters. These rules are illustrated in the examples in this topic.

Examples of Modifying Nested Procedures

Examples are as follows.

Example
The following example shows overrides and additions to DD statements.

Procedure C:
//C PROC
//CS1 EXEC PGM=CCC
//CS1DD1 DD DSNAME=A.B.C,DISP=SHR
//CS1DD2 DD SYSOUT=A
// PEND
Procedure B:
//B PROC
//BS1 EXEC PROC=C
//CS1.CS1DD1 DD DSNAME=X.Y.Z This statement is a valid
//* override of procedure C, stepCS1
//* for DD CS1DD1
//*
//CS1.CS1DD3 DD SYSOUT=A This statement is a valid
//* addition to procedure C, step CS1
//BS2 EXEC PGM=BBB
//BS2DD1 DD DSNAME=E,DISP=SHR
// PEND
Procedure A:
//A PROC
//AS1 EXEC PROC=B
//BS2.BS2DD2 DD DSNAME=G,DISP=SHR This statement is a valid
//* addition to procedure B, step BS2
//AS2 EXEC PGM=AAA
//AS2DD1 DD DSNAME=E,DISP=SHR
// PEND
Job Stream:
//JOB1 JOB
//STEP1 EXEC PROC=A
//AS2.AS2DD2 DD DSNAME=G,DISP=SHR This statement is a valid
//* addition to procedure A, step AS2
//STEP2 EXEC PGM=IEFBR14
.

The following statements are equivalent to the nested procedures shown above.

//JOB1 JOB
//CS1 EXEC PGM=CCC
//CS1DD1 DD DSNAME=X.Y.Z,DISP=SHR
//*
//CS1DD2 DD SYSOUT=A
//CS1DD3 DD SYSOUT=A
//*
//BS2 EXEC PGM=BBB
//BS2DD1 DD DSNAME=E,DISP=SHR
//BS2DD2 DD DSNAME=G,DISP=SHR
//*
//AS2 EXEC PGM=AAA
//AS2DD1 DD DSNAME=E,DISP=SHR
//AS2DD2 DD DSNAME=G,DISP=SHR
//STEP2 EXEC PGM=IEFBR14

Example
The following example shows nested procedures and invalid overrides of DD statement parameters that result in JCL errors. The example refers to the rules that appear in “Modifying Nested Procedures”

Procedure C:
//C PROC
//CS1 EXEC PGM=CCC
//CS1DD1 DD DSN=A.B.C,DISP=SHR
//CS1DD2 DD SYSOUT=A
// PEND
Procedure B:
//B PROC
//BS1 EXEC PROC=C
//CS1.CS1DD1 DD DSNAME=X.Y.Z
//CS1.CS1DD3 DD SYSOUT=A
//BS2 EXEC PGM=BBB
//BS2DD1 DD DSN=E,DISP=SHR
// PEND
Procedure A:
//A PROC
//AS1 EXEC PROC=B
//BS1.CS1.CS1DD1 DD DSN=X.Y.Z This statement is an invalid
//* override of procedure B, step BS1,
//* DD CS1.CS1DD1 (rules 4 and 5)
//*
//BS1.CS1.CS1DD3 DD SYSOUT=A This statement is an invalid
//* override of procedure B, step BS1,
//* DD CS1.CS1DD3 (rules 4 and 5)
//*
//BS1.BS1DD1 DD DSN=G,DISP=SHR This statement is an invalid
//* addition to procedure B, step BS1
//* (rule 3)
//AS2 EXEC PGM=AAA
//AS2DD1 DD DSN=E,DISP=SHR
// PEND
Job Stream:
//JOB1 JOB
//STEP1 EXEC PROC=A
//AS1.BS1.CS1.CS1DD1 DD DSN=X This statement is an invalid
//* override of procedure A, step AS1,
//* DD BS1.CS1.CS1DD1 (rules 3 and 5) //STEP2 EXEC PGM=IEFBR14

All rights reserved © 2018 Wisdom IT Services India Pvt. Ltd DMCA.com Protection Status

IBM-JCL Topics