JCL - 基础库

基础库是分区数据集(PDS),它保存要在JCL中执行的程序的加载模块或在程序中调用的编目过程。 可以为 JOBLIB 库中的整个 JCL 或 STEPLIB 语句中的特定作业步骤指定基础库。

JOBLIB 语句

JOBLIB 语句用于标识 JCL 中要执行的程序的位置。 JOBLIB 语句指定在 JOB 语句之后、EXEC 语句之前。 这只能用于流内过程和程序。

语法

以下是 JCL JOBLIB 语句的基本语法:

//JOBLIB DD DSN=dsnname,DISP=SHR                                      

JOBLIB 语句适用于 JCL 中的所有 EXEC 语句。 EXEC语句中指定的程序将在JOBLIB库中搜索,然后在系统库中搜索。

例如,如果EXEC语句正在执行COBOL程序,则COBOL程序的加载模块应放置在JOBLIB库中。

STEPLIB 语句

STEPLIB 语句用于标识要在作业步骤内执行的程序的位置。 STEPLIB 语句指定在作业步骤的 EXEC 语句之后、DD 语句之前。

语法

以下是 JCL STEPLIB 语句的基本语法:

//STEPLIB DD DSN=dsnname,DISP=SHR                                      

EXEC 语句中指定的程序将在STEPLIB 库中搜索,然后在系统库中搜索。 在作业步骤中编码的 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 语句

可以使用 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 成员中进行编码。 可以在 INCLUDE 成员中编写 INLCUDE 语句,并且可以进一步嵌套最多 15 层。

JCLLIB 语句

JCLLIB 语句用于标识作业中使用的私有库。 它可以与流内过程和编目过程一起使用。

语法

以下是 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
//*