基础库是分区数据集(PDS),它包含要在JCL中执行的程序的加载模块或在程序中调用的编目过程.可以在 JOBLIB 库中为整个JCL指定基本库,也可以在 STEPLIB 语句中为特定作业步骤指定基本库.
使用 JOBLIB 语句来标识要在JCL中执行的程序的位置. JOBL语句在JOB语句之后和EXEC语句之前指定.这只能用于流程序和程序.
以下是JCL JOBLIB语句的基本语法:
//JOBLIB DD DSN=dsnname,DISP=SHR
JOBLIB语句适用于JCL内的所有EXEC声明.将在JOBLIB库中搜索EXEC语句中指定的程序,然后搜索系统库.
例如,如果EXEC语句正在执行COBOL程序,则COBOL的加载模块程序应放在JOBLIB库中.
使用 STEPLIB 语句来识别在作业步骤中执行的程序的位置. STEPLIB语句在EXEC语句之后和作业步骤的DD语句之前指定.
以下是JCL的基本语法STEPLIB声明:
//STEPLIB DD DSN=dsnname,DISP=SHR
将在STEPLIB库中搜索EXEC语句中指定的程序,然后搜索系统库.在作业步骤中编码的STEPLIB将覆盖JOBLIB语句.
以下示例显示JOBLIB和STEPLIB语句的用法:
//MYJCL JOB ,,CLASS=6,NOTIFY=&SYSUID //* //JOBLIB DD DSN=MYPROC.BASE.LIB1,DISP=SHR //* //STEP1 EXEC PGM=MYPROG1 //INPUT1 DD DSN=MYFILE.SAMPLE.INPUT1,DISP=SHR //OUTPUT1 DD DSN=MYFILES.SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE), // RECFM=FB,LRECL=80 //* //STEP2 EXEC PGM=MYPROG2 //STEPLIB DD DSN=MYPROC.BASE.LIB2,DISP=SHR //INPUT2 DD DSN=MYFILE.SAMPLE.INPUT2,DISP=SHR //OUTPUT2 DD DSN=MYFILES.SAMPLE.OUTPUT2,DISP=(,CATLG,DELETE), // RECFM=FB,LRECL=80
这里,在MYPROC.SAMPLE.LIB1中搜索程序MYPROG1的加载模块(在STEP1中).如果未找到,则在系统库中搜索.在STEP2中,STEPLIB覆盖JOBLIB并在MYPROC.SAMPLE.LIB2中搜索程序MYPROG2的加载模块,然后在系统库中搜索.
可以使用 INCLUDE 语句将一组在PDS成员中编码的JCL语句包含在JCL中.当JES解释JCL时,INCLUDE成员中的JCL语句集替换INCLUDE语句.
以下是基本语法JCL INCLUDE声明:
//name INCLUDE MEMBER=member-name
INCLUDE语句的主要目的是可重用性.例如,在许多JCL中使用的公共文件可以编码为INCLUDE成员中的DD语句,并在JCL中使用.
虚拟DD语句,数据卡规范,PROC,JOB,PROC语句不能在INCLUDE成员中编码. INLCUDE语句可以在INCLUDE成员中编码,进一步嵌套最多可以达到15个级别.
A JCLLIB 语句用于标识作业中使用的私有库.它可以与instream和编目过程一起使用.
以下是JCL JCLLIB语句的基本语法:
//name JCLLIB ORDER=(library1, library2....)
将按给定顺序搜索JCLLIB语句中指定的库,以查找作业中使用的程序,过程和INCLUDE成员. JCL中只能有一个JCLLIB语句;在JOB语句之后和EXEC和INCLUDE语句之前指定,但它不能在INCLUDE成员中编码.
在以下示例中,程序MYPROG3和INCLUDE成员MYINCL按MYPROC.BASE.LIB1,MYPROC.BASE.LIB2,系统库的顺序搜索.
//MYJCL JOB ,,CLASS=6,NOTIFY=&SYSUID //* //MYLIB JCLLIB ORDER=(MYPROC.BASE.LIB1,MYPROC.BASE.LIB2) //* //STEP1 EXEC PGM=MYPROG3//INC INCLUDE MEMBER=MYINCL //OUTPUT1 DD DSN=MYFILES.SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE), // RECFM=FB,LRECL=80 //*