DD 声明
数据集是具有以特定格式组织的记录的大型机文件。 数据集存储在直接访问存储设备(DASD)或大型机磁带上,是基本数据存储区域。 如果需要在批处理程序中使用/创建这些数据,则文件(即数据集)物理名称以及文件格式和组织将在JCL中编码。
使用DD statement给出JCL中使用的每个数据集的定义。 需要在DD语句中描述作业步骤所需的输入和输出资源,其中包含数据集组织,存储要求和记录长度等信息。
语法 (Syntax)
以下是JCL DD语句的基本语法:
//DD-name DD Parameters
描述 (Description)
让我们看一下上面DD语句语法中使用的术语的描述。
DD-NAME
DD-NAME标识数据集或输入/输出资源。 如果这是COBOL/Assembler程序使用的输入/输出文件,则该程序中的该名称将引用该文件。
DD
这是将其标识为DD语句的关键字。
参数
以下是DD语句的各种参数。 您可以根据需要使用一个或多个参数,并用逗号分隔:
参数 | 描述 |
---|---|
DSN | DSN参数引用新创建或现有数据集的物理数据集名称。 DSN值可以由1到8个字符长度的子名组成,以句点分隔,总长度为44个字符(字母数字)。 以下是语法: DSN=Physical Dataset Name Temporary datasets仅需要存储作业持续时间,并在作业完成时删除。 此类数据集表示为DSN=&name或仅指定DSN。 如果要在下一个作业步骤中使用作业步骤创建的临时数据集,则将其引用为DSN=*.stepname.ddname 。 这称为Backward Referencing. |
DISP | DISP参数用于描述数据集的状态,在正常和异常完成时作业步骤结束时的处置。 仅当在同一作业步骤(如临时数据集)中创建和删除数据集时,DD语句中才需要DISP。 以下是语法: DISP=(status, normal-disposition, abnormal-disposition) 以下是status有效值:
normal-disposition参数可以采用以下值之一
abnormal-disposition参数可以采用以下值之一
以下是CATLG,UNCATLG,DELETE,PASS和KEEP参数的说明:
如果未指定DISP的任何子参数,则默认值如下:
|
DCB | 数据控制块(DCB)参数详细说明了数据集的物理特征。 在作业步骤中新创建的数据集需要此参数。 LRECL是数据集中保存的每条记录的长度。 RECFM是数据集的记录格式。 RECFM可以保存值FB,V或VB。 FB是固定块组织,其中一个或多个逻辑记录在单个块中分组。 V是可变组织,其中一个可变长度逻辑记录放置在一个物理块内。 VB是可变块组织,其中一个或多个可变长度逻辑记录放置在一个物理块内。 BLKSIZE是物理块的大小。 块越大,FB或VB文件的记录数越大。 DSORG是数据集组织的类型。 DSORG可以保存值PS(物理顺序),PO(分区组织)和DA(直接组织)。 如果需要在同一个jobstep或JCL中将一个数据集的DCB值复制到另一个数据集,则将其指定为DCB = * .stepname.ddname,其中stepname是作业步骤的名称,ddname是数据集, DCB被复制。 检查下面的示例,其中RECFM = FB,LRECL = 80形成数据集OUTPUT1的DCB。 |
SPACE | SPACE参数指定DASD(直接访问存储磁盘)中数据集所需的空间。 以下是语法: SPACE=(spcunits, (pri, sec, dir), RLSE) 以下是所有使用参数的说明:
|
UNIT | UNIT和VOL参数列在编目数据集的系统目录中,因此只能使用物理DSN名称进行访问。 但对于未编目的数据集,DD语句应包含这些参数。 对于要创建的新数据集,可以指定UNIT/VOL参数,或者Z/OS分配合适的设备和卷。 UNIT参数指定存储数据集的设备类型。 可以使用硬件地址或设备类型组来识别设备类型。 以下是语法: UNIT=DASD | SYSDA 其中DASD代表直接访问存储设备,SYSDA代表系统直接访问,并指代下一个可用的磁盘存储设备。 |
VOL | VOL参数指定由UNIT参数标识的设备上的卷编号。 以下是语法: VOL=SER=(v1,v2) 其中v1,v2是卷序列号。 您也可以使用以下语法: VOL=REF=*.DDNAME 其中REF是JCL中任何前面作业步骤中数据集的卷序列号的后向引用。 |
SYSOUT | 到目前为止讨论的DD语句参数对应于存储在数据集中的数据。 SYSOUT参数根据指定的类将数据定向到输出设备。 以下是语法 SYSOUT=class 如果class为A,则它将输出定向到打印机,如果class为*则它将输出定向到JOB语句中MSGCLASS参数的目标。 |
例子 (Example)
以下是一个示例,它使用了DD语句以及上面解释的各种参数:
//TTYYSAMP JOB 'TUTO',CLASS=6,MSGCLASS=X,REGION=8K,
// NOTIFY=&SYSUID
//*
//STEP010 EXEC PGM=ICETOOL,ADDRSPC=REAL
//*
//INPUT1 DD DSN=TUTO.SORT.INPUT1,DISP=SHR
//INPUT2 DD DSN=TUTO.SORT.INPUT2,DISP=SHR,UNIT=SYSDA,
// VOL=SER=(1243,1244)
//OUTPUT1 DD DSN=MYFILES.SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE),
// RECFM=FB,LRECL=80,SPACE=(CYL,(10,20))
//OUTPUT2 DD SYSOUT=*