定义数据集( Defining Datasets)
数据集名称指定文件的名称,它在JCL中由DSN表示。 DSN参数引用新创建或现有数据集的物理数据集名称。 DSN值可以由1到8个字符长度的子名组成,以句点分隔,总长度为44个字符(字母数字)。 以下是语法:
<b>DSN=&name | *.stepname.ddname</b>
Temporary datasets仅需要存储作业持续时间,并在作业完成时删除。 此类数据集表示为DSN=&name或仅指定DSN。
如果要在下一个作业步骤中使用作业步骤创建的临时数据集,则将其引用为DSN=*.stepname.ddname 。 这称为Backward Referencing.
连接数据集
如果存在多个相同格式的数据集,则可以将它们连接起来并作为输入传递给单个DD名称中的程序。
//CONCATEX JOB CLASS=6,NOTIFY=&SYSUID
//*
//STEP10 EXEC PGM=SORT
//SORTIN DD DSN=SAMPLE.INPUT1,DISP=SHR
// DD DSN=SAMPLE.INPUT2,DISP=SHR
// DD DSN=SAMPLE.INPUT3,DISP=SHR
//SORTOUT DD DSN=SAMPLE.OUTPUT,DISP=(,CATLG,DELETE),
// LRECL=50,RECFM=FB
在上面的示例中,三个数据集连接在一起,并作为输入传递给SORTIN DD名称中的SORT程序。 合并文件,在指定的键字段上排序,然后写入SORTOUT DD名称中的单个输出文件SAMPLE.OUTPUT。
覆盖数据集
在标准化的JCL中,要执行的程序及其相关数据集放在编目过程中,该过程在JCL中调用。 通常,出于测试目的或事件修复,可能需要使用除编目过程中指定的数据集之外的其他数据集。 在这种情况下,可以在JCL中覆盖过程中的数据集。
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//JSTEP1 EXEC <b>CATLPROC</b>,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
// DATAC=MYDATA.BASE.LIB1(DATA1)
//STEP1.IN1 DD DSN=MYDATA.OVER.INPUT,DISP=SHR
//*
//* The cataloged procedure is as below:
//*
//CATLPROC <b>PROC</b> PROG=,BASELB=MYCOBOL.BASE.LIB1
//*
//STEP1 EXEC PGM=&PROG
//STEPLIB DD DSN=&BASELB,DISP=SHR
//IN1 DD DSN=MYDATA.URMI.INPUT,DISP=SHR
//OUT1 DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD MYDATA.BASE.LIB1(DATA1),DISP=SHR
//*
//STEP2 EXEC PGM=SORT
在上面的示例中,数据集IN1使用PROC中的文件MYDATA.URMI.INPUT,该文件在JCL中被覆盖。 因此,执行中使用的输入文件是MYDATA.OVER.INPUT。 请注意,数据集称为STEP1.IN1。 如果JCL/PROC中只有一个步骤,则只能使用DD名称引用数据集。 同样,如果JCL中有多个步骤,则数据集将被重写为JSTEP1.STEP1.IN1。
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//STEP EXEC <b>CATLPROC</b>,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
// DATAC=MYDATA.BASE.LIB1(DATA1)
//STEP1.IN1 DD DSN=MYDATA.OVER.INPUT,DISP=SHR
// DD DUMMY
// DD DUMMY
//*
在上面的示例中,在IN1中连接的三个数据集中,第一个在JCL中被重写,其余数据保存在PROC中。
在JCL中定义GDG
生成数据组(GDG)是通过通用名称彼此相关的数据集组。 通用名称称为GDG基础,与基础关联的每个数据集称为GDG版本。
例如,MYDATA.URMI.SAMPLE.GDG是GDG基本名称。 数据集命名为MYDATA.URMI.SAMPLE.GDG.G0001V00,MYDATA.URMI.SAMPLE.GDG.G0002V00等。 最新版本的GDG称为MYDATA.URMI.SAMPLE.GDG(0),以前的版本称为(-1),( - 2),依此类推。 在程序中创建的下一个版本在JCL中称为MYDATA.URMI.SAMPLE.GDG(+1)。
在JCL中创建/更改GDG
GDG版本可以具有相同或不同的DCB参数。 初始模型DCB可以定义为由所有版本使用,但在创建新版本时可以覆盖它。
//GDGSTEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE GDG(NAME(MYDATA.URMI.SAMPLE.GDG) -
LIMIT(7) -
NOEMPTY -
SCRATCH)
/*
//GDGSTEP2 EXEC PGM=IEFBR14
//GDGMODLD DD DSN=MYDATA.URMI.SAMPLE.GDG,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,10,20),
// DCB=(LRECL=50,RECFM=FB)
//
在上面的示例中,IDCAMS实用程序使用SYSIN DD语句中传递的以下参数在GDGSTEP1中定义GDG基础:
NAME指定GDG基础的物理数据集名称。
LIMIT指定GDG基础可容纳的最大版本数。
当达到LIMIT时, EMPTY取消所有代的编目。
NOEMPTY取消了最近一代的编目。
SCRATCH在未编目时物理删除生成。
NOSCRATCH不删除数据集,即可以使用UNIT和VOL参数引用它。
在GDGSTEP2中,IEFBR14实用程序指定所有版本使用的模型DD参数。
IDCAMS可用于更改GDG的定义参数,例如增加LIMIT,将EMPTY更改为NOEMPTY等,使用SYSIN命令的相关版本为ALTER MYDATA.URMI.SAMPLE.GDG LIMIT(15) EMPTY 。
在JCL中删除GDG
使用IEFBR14实用程序,我们可以删除单个版本的GDG。
//GDGSTEP3 EXEC PGM=IEFBR14
//GDGDEL DD DSN=MYDATA.URMI.SAMPLE.GDG(0),
// DISP=(OLD,DELETE,DELETE)
在上面的示例中,删除了最新版本的MYDATA.URMI.SAMPLE.GDG。 请注意,正常作业完成时的DISP参数编码为DELETE。 因此,当作业完成执行时,将删除数据集。
IDCAMS可用于使用SYSIN命令DELETE(MYDATA.URMI.SAMPLE.GDG) GDG FORCE/PURGE删除GDG及其相关版本。
FORCE删除GDG版本和GDG基础。 如果任何GDG版本设置的过期日期尚未到期,则不会删除这些版本,因此将保留GDG基础。
无论过期日期如何, PURGE删除GDG版本和GDG基础。
在JCL中使用GDG
在以下示例中,最新版本的MYDATA.URMI.SAMPLE.GDG用作程序的输入,并创建新版本的MYDATA.URMI.SAMPLE.GDG作为输出。
//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01 EXEC PGM=MYCOBB
//IN1 DD DSN=MYDATA.URMI.SAMPLE.GDG(0),DISP=SHR
//OUT1 DD DSN=MYDATA.URMI.SAMPLE.GDG(+1),DISP=(,CALTG,DELETE)
// LRECL=100,RECFM=FB
在这里,如果GDG已被实际名称引用,如MYDATA.URMI.SAMPLE.GDG.G0001V00,那么每次执行前它都会导致更改JCL。 使用(0)和(+1)使其动态替代GDG版本执行。