数据集名称指定文件的名称,它在JCL中由DSN表示. DSN参数引用新创建或现有数据集的物理数据集名称. DSN值可以由1到8个字符长度的子名组成,以句点分隔,总长度为44个字符(字母数字).以下是语法:
DSN=&name | *.stepname.ddname
临时数据集仅需要存储作业持续时间,并在作业完成时删除.此类数据集表示为 DSN =& name ,或者只是没有指定DSN.
如果要在作业步骤中创建临时数据集下一个作业步骤,然后它被引用为 DSN = * .stepname.ddname .这称为向后引用.
如果有多个相同格式的数据集,则为可以连接并以单个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 CATLPROC,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 PROC 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 CATLPROC,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中.
生成数据组(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).
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基地可以容纳的离子.
EMPTY 在达到LIMIT时取消所有代的编目.
NOEMPTY 取消最近一代的目录.
SCRATCH 在未编目时物理删除生成.
NOSCRATCH 不删除数据集,即可以使用它来引用UNIT和VOL参数.
在GDGSTEP2中,IEFBR14实用程序指定所有版本都使用的模型DD参数.
IDCAMS可用于更改GDG的定义参数,例如增加LIMIT,将EMPTY更改为NOEMPTY等,使用SYSIN命令的相关版本为 ALTER MYDATA.URMI.SAMPLE. GDG LIMIT(15)EMPTY .
使用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命令删除GDG及其相关版本 DELETE(MYDATA.URMI.SAMPLE. GDG)GDG FORCE/PURGE .
FORCE 删除GDG版本和GDG基地.如果任何GDG版本设置的过期日期尚未到期,则不会删除这些版本,因此会保留GDG基础.
PURGE 删除GDG版本和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版本执行.