Jcl 简明教程

JCL - Base Library

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

JOBLIB Statement

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

Syntax

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

//JOBLIB DD DSN=dsnname,DISP=SHR

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

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

STEPLIB Statement

STEPLIB 语句用于识别任务步骤中要执行的程序的位置。STEPLIB 语句在 EXEC 语句后而且在任务步骤的 DD 语句前指定。

Syntax

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

//STEPLIB DD DSN=dsnname,DISP=SHR

EXEC 语句中指定的程序将在 STEPLIB 库中搜索,然后在系统库中搜索。任务步骤中编码的 STEPLIB 会覆盖 JOBLIB 语句。

Example

以下示例显示了 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 Statement

可以使用 INCLUDE 语句将 PDS 成员中编码的一组 JCL 语句包含到 JCL 中。当 JES 解释 JCL 时,INCLUDE 成员中的 JCL 语句集将替换 INCLUDE 语句。

Syntax

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

//name INCLUDE MEMBER=member-name

INCLUDE 语句的主要目的是可重用性。例如,在许多 JCL 中使用的通用文件可以编码为 INCLUDE 成员中的 DD 语句并用于 JCL 中。

虚拟 DD 语句、数据卡规范、PROC、JOB、PROC 语句不能编码到 INCLUDE 成员中。可以在 INCLUDE 成员中编码 INLCUDE 语句,并且可以进一步嵌套,最多 15 级。

JCLLIB Statement

JCLLIB 语句用于识别作业中使用的私有库。它既可用于流内过程,也可用于编目过程。

Syntax

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

//name JCLLIB ORDER=(library1, library2....)

JCLLIB 语句中指定的库将按给定的顺序进行搜索,以找到作业中使用的程序、过程和 INCLUDE 成员。JCL 中只能有一个 JCLLIB 语句;指定在 JOB 语句之后且在 EXEC 和 INCLUDE 语句之前,但不能编码到 INCLUDE 成员中。

Example

在以下示例中,将按 MYPROC.BASE.LIB1、MYPROC.BASE.LIB2、系统库的顺序搜索程序 MYPROG3 和 INCLUDE 成员 MYINCL。

//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
//*