1. 编写规则
不能包含以下JCL Statement:
l JOB 语句
l 流内数据集定义语句 “DD * ” 到 “/*”
l JCL 结束语句:一行空的“//”
l JOBLIB 和JOBCAT 语句
2. In-stream procedure
流内过程嵌在JCL 里,以PROC 语句开始,PEND 语句结束
//COPYDATA JOB NOTIFY=&SYSUID
//********* COPY DATASET ***********
//MYPROC PROC INDD=,OUTDD=
//CPY EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DSN=&INDD.,DISP=SHR
//SYSUT2 DD DSN=&OUTDD.,DISP=(NEW,CATLG,DELETE),
// SPACE=(TRK,(2,1)),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=240,DSORG=PS)
//SYSIN DD DUMMY
//MYEND PEND
//CPYLOAD EXEC MYPROC,INDD=DEVP124.DATA,
// OUTDD=DEVP124.DATA1
过程代码必须写在调用代码前面
3. Cataloged Procedure
编目过程要存放在一个分区数据集的成员里,语法与流内过程一样,但不需要使用PEND
4. 过程的调用
//作业步名 EXEC PROC=过程名,[参数名=参数值[,参数名=参数值]]
//作业步名 EXEC 过程名,[参数名=参数值[,参数名=参数值]]
5. JCLLIB 语句
//[name] JCLLIB ORDER=(library[,library]...) [comments]
用于指定编目过程所在目录,注意它与JOBLIB的区别。
6. 调用过程时overridden/added/nullified EXEC
PROC P1
//STEP1 EXEC PGM=PAYROLL,TIME=(2,30),ACCT=1876
//STEP2 EXEC PGM=PRINT,TIME=(4,30)
JOBSTREAM
//XY2 JOB
//STEPA EXEC P1,TIME.STEP1=(1,10),
// ACCT.STEP1=,PARM.STEP2=TOP
RESULTING JCL
//STEP1 EXEC PGM=PAYROLL,TIME=(1,10)
//STEP2 EXEC PGM=PRINT,TIME=(4,30),PARM=TOP
7. 调用过程时overridden/added/nullified DD
PROC P1
//STEP1 EXEC PGM=PAYROLL
//A DD DSN=INPUT,DISP=OLD
//B DD DSN=OUTPUT,DISP=(,CATLG,DELETE),UNIT=3350,
// SPACE=(CYL,(20,5)),DCB=(RECFM=FB,LRECL=80,BLKSIZE=320)
//STEP2 EXEC PGM=PRINT
//A DD DSN=OUTPUT,DISP=(OLD,DELETE),UNIT=3350,VOL=SER=PAK08
//B DD SYSOUT=*
JOBSTREAM
//JOB JOB MSGCLASS=A
//FS EXEC P1
//STEP1.A DD DISP=(OLD,DELETE,DELETE)
//STEP1.B DD UNIT=3390,DCB=(BLKSIZE=800)
//STEP1.D DD *
DATA
//STEP2.A DD UNIT=,VOL=SER=,DISP=OLD
RESULTING JCL
//JOB JOB MSGCLASS=A
//STEP1 EXEC PGM=PAYROLL
//A DD DSN=INPUT, DISP=(OLD,DELETE,DELETE)
//B DD DSN=OUTPUT,DISP=(,CATLG,DELETE),UNIT=3390,
// SPACE=(CYL,(20,5)),DCB=(RECFM=FB,LRECL=80,BLKSIZE=800)
//D DD *
DATA
//STEP2 EXEC PGM=PRINT
//A DD DSN=OUTPUT,DISP=OLD ,UNIT=3350,VOL=SER=PAK08
//B DD SYSOUT=*
8. Modifying Symbolic parameters
PROC P1
//P1 PROC UN=3390,OUT=OUTPUT
//STEP1 EXEC PGM=PAYROLL
//A DD DSN=INPUT,DISP=OLD
//B DD DSN=&OUT,DISP=(,CATLG,DELETE),UNIT=&UN,
// SPACE=(CYL,(20,5)),DCB=(RECFM=FB,LRECL=80,BLKSIZE=320)
//STEP2 EXEC PGM=PRINT
//A DD DSN=&OUT,DISP=(OLD,DELETE),UNIT=&UN,VOL=SER=PAK08
//B DD SYSOUT=*
JOBSTREAM
//JOB JOB MSGCLASS=A
//FS EXEC P1,UN=3380,OUT=TEST.OUT
RESULT
//JOB JOB MSGCLASS=A
//STEP1 EXEC PGM=PAYROLL
//A DD DSN=INPUT,DISP=OLD
//B DD DSN=TEST.OUT,DISP=(,CATLG,DELETE),UNIT=3380,
// SPACE=(CYL,(20,5)),DCB=(RECFM=FB,LRECL=80,BLKSIZE=320)
//STEP2 EXEC PGM=PRINT
//A DD DSN=TEST.OUT,DISP=(OLD,DELETE),UNIT=3380,VOL=SER=PAK08
//B DD SYSOUT=*
Note:From 6,7 and 8,we can see the two method of modifying procedures
vOverriding,adding,or nullifying parameters
vSymbolic parameters