INSTREAM and CATALOGED PROCEDURES
1. Introduction
2. Instream Procedure
3. Cataloged procedure
4. Modify statements in a procedure
5. Symbolic parameters
INTRODUCTION
In JCL, We have an important concept reusability in the form of
Instream and Cataloged procedures, Often, in work environments
users can utilized same JCL. Using instream / cataloged procedures
we can reuse the jcl code which was stored in another data set, in
our data set.
Syntax for Executing procedure
--> EXEC [PROC=]procedure-name
INSTREAM PROCEDURE
A JCL Procedure is a pre-written segment of code, that you can include
in your JOB. You code instream data set within the job and use it in
that job as many times as you want.
An Instream Procedure JCL Example
EXPLANATION
- Instream procedure should be defined , before any EXEC statement defined
- Instream procedure startes with PROC and ends with PEND statements
- Instream procedure is executed when we main jcl called.
The maximum number of instream procedures you can in any job is 15
CATALOGED PROCEDURES
Pre-written segment of code (which is stored as an member of PDS),
which you can use as many times you want in any job in the system.
IBM supplies a utility program called IEBUPDTE; this program places
cataloged procedures into partitioned data sets. These procedures
are placed inside a system library called SYS1.PROCLIB.
Developing Catalog Procedure
STEP1:
Write an Cataloged procedure in MYLIB.EXAMPLES.TEST(CATALOG1)
//CATLOG1 PROC
//STEP1 EXEC PGM=COBPROG
//INFILE DD DSN=TEST.GLOB.LIB,
// DISP=SHR
//OUTFILE DD DSN=TEST.GLOB.SPACE.LIB,
// DISP=SHR
STEP2 :
Write Main JCL which will call out CATALOG1 JCL
//MYJOB JOB (WE234),'RAMESH',CLASS=A
// JCLLIB ORDER=(MYLIB.EXAMPLES.TEST) <-- Attention
//STEP1 EXEC CATALOG1 <-- Attention
//
EXPLANATION
- When you executing CATALOGED PROCEDURE, If you not specified
where it is with JCLLIB statement , it will serach for this
procedure in system procedure library SYS1.PROCLIB
- There many IBM-supplied procedures that compile, link, and run programs
Job will search the JCLLIB libraries first, in the order in which they�re coded. If the
procedure is not found in any of the named libraries, SYS1.PROCLIB is searched.
The following statements cannot be included within the procedure
JOB
DD * or DD DATA
JES2 or JES3 control statements
MODIFY STATEMENTS IN A PROCEDURE
There are times, when we want to change procedure statements according
to our requirement, IBM provided a way without changing actual procedure,
we can add/modify contents of procedure. Let us discuss what are the ways
There are two types of modification we can do ,
1. on EXEC statement
2. on DD statement
on EXEC statement
We can do following functions on EXEC statement in a procedure
- Modify parameter on EXEC statements
PROCEDURE STATEMENT - //STEP10 EXEC PGM=COBPROG,TIME=30
PARAMETER OVERRIDE - //MYSTEP EXEC PROC=MYPROC,TIME.STEP10=40
Now Resultant TIME value for that step (in proc) is 40
- Adding parameter to an EXEC statement / all EXEC statement
PROCEDURE STATEMENT - //STEP10 EXEC PGM=COBPROG,TIME=30
PARAMETER ADDING - //MYSTEP EXEC PROC=MYPROC,REGION.STEP10=56K
(for single step)
REGION will be added to the STEP10 in MYPROC procedure
PARAMETER ADDING - //MYSTEP EXEC PROC=MYPROC,REGION=56K
(for single step)
If REGION is not available for any step in that procedure.
REGION will be added to all steps in procedure. If REGION
is available for any step in procedure, REGION value will
be override existing value on that step.
- Nullifying the parameter value
PROCEDURE STATEMENT - //STEP10 EXEC PGM=COBPROG,TIME=30
PARAMETER ADDING - //MYSTEP EXEC PROC=MYPROC,TIME.STEP10=
Dont give any value for that parameter, it will nullifying
that parameter value in procedure
on DD statement
- Syntax for add/modify DD statements in a procedure
//name EXEC [PROC=]procedure-name
//[procstepname].ddname DD parameter=value
//
We can do following functions on EXEC statement in a
procedure using above syntax
- Modify existing parameter on DD statements within a procedure
- Add parameter to existing DD statement within a procedure
- Add DD statement to a job step
- Nullify the effect of parameter on DD statement in a procedure
SYMBOLIC PARAMETERS
Usaually, the same JCL can be used by different programmers to
implement common tasks, such as the opening, reading, and writing
of data sets. In those cases , we can use symbolic parameters.
Using symbolic parameters we can pass value to a parameter which
is used in procedure. A symbolic parameter on a DD statement is
coded the parameter preceded by an ampersand.
Syntax for assigning values to symbolic parameters in a procedure
//[name] EXEC [PROC=]procedure-name,symbolic-parameter=value
EXAMPLE JCL -> Procedure which is using symbolic parameter
//MYPROC PROC
//MYSTEP EXEC PGM=COBPROG
//INFILE DD DSN=&DOC..TEST.LIB,DISP=SHR
//OUTFILE DD DSN=&DOC..TEST.OUT,
// DISP=(NEW,KEEP,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,(&SPACE))
The invoking EXEC statement
//STEPA1 EXEC MYPROC,DOC=MYLIB,SPACE='10,5'
The effective JCL
//MYPROC PROC
//MYSTEP EXEC PGM=COBPROG
//INFILE DD DSN=MYLIB.TEST.LIB,DISP=SHR
//OUTFILE DD DSN=MYLIB.TEST.OUT,
// DISP=(NEW,KEEP,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,('10,5'))
EXPLANATION -
In above example, &DOC,&SPACE are symbolic parameters in MYPROC procedure
We are passing values from invoking JCL,these value will be override the
&DOC and &SPACE where ever they find in the procedure
NEXT CHAPTER TOPIC :GDG (Generation Data Group)
Visit jcl books section in this site for good books