📅  最后修改于: 2020-11-22 17:03:21             🧑  作者: Mango
基本库是分区数据集(PDS),它保存要在JCL中执行的程序的加载模块或在程序中被调用的分类过程。可以为JOBLIB库中的整个JCL或STEPLIB语句中的特定作业步骤指定基础库。
使用JOBLIB语句来标识要在JCL中执行的程序的位置。 JOBLIB语句在JOB语句之后和EXEC语句之前指定。这只能用于流内过程和程序。
以下是JCL JOBLIB语句的基本语法:
//JOBLIB DD DSN=dsnname,DISP=SHR
JOBLIB语句适用于JCL中的所有EXEC语句。 EXEC语句中指定的程序将在JOBLIB库中搜索,然后在系统库中搜索。
例如,如果EXEC语句正在执行COBOL程序,则应将COBOL程序的装入模块放在JOBLIB库中。
使用STEPLIB语句来识别作业步骤中要执行的程序的位置。在作业步骤的EXEC语句之后和DD语句之前指定STEPLIB语句。
以下是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语句将编码在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语句用于标识作业中使用的私有库。它可以与流内和分类过程一起使用。
以下是JCL JCLLIB语句的基本语法:
//name JCLLIB ORDER=(library1, library2....)
将按照给定的顺序搜索JCLLIB语句中指定的库,以找到作业中使用的程序,过程和INCLUDE成员。一个JCL中只能有一个JCLLIB语句;在JOB语句之后和EXEC和INCLUDE语句之前指定,但是不能在INCLUDE成员进行编码。
在下面的示例中,按照系统库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
//*