JCL - DD 语句
数据集是包含以特定格式组织的记录的大型机文件。 数据集存储在主机的DASD(Direct Access Storage Device)或磁带上,是基本的数据存储区域。 如果需要在批处理程序中使用/创建这些数据,则文件(即数据集)物理名称以及文件格式和组织都以 JCL 进行编码。
JCL 中使用的每个数据集的定义是使用 DD 语句给出的。 作业步骤所需的输入和输出资源需要在DD语句中描述,其中包含数据集组织、存储要求和记录长度等信息。
语法
以下是 JCL DD 语句的基本语法:
//DD-name DD Parameters
描述
让我们看看上述 DD 语句语法中使用的术语的描述。
DD-NAME
DD-NAME 标识数据集或输入/输出资源。 如果这是 COBOL/汇编程序使用的输入/输出文件,则该文件在程序中通过该名称引用。
DD
这是将其标识为 DD 语句的关键字。
PARAMETERS
以下是DD语句的各个参数。 您可以根据需要使用一个或多个参数,参数之间以逗号分隔:
参数 | 描述 |
---|---|
DSN | DSN参数是指新创建的或现有数据集的物理数据集名称。 DSN 值可由子名称组成,每个子名称长度为 1 到 8 个字符,以句点分隔,总长度为 44 个字符(字母数字)。 语法如下: DSN=物理数据集名称 临时数据集仅在作业持续时间内需要存储,并在作业完成时删除。 此类数据集表示为 DSN=&name 或简单地不指定 DSN。 如果要在下一个作业步骤中使用由作业步骤创建的临时数据集,则将其引用为 DSN=*.stepname.ddname。 这称为向后引用。 |
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(直接组织)值。 当需要将一个数据集的 DCB 值复制到同一作业步骤或 JCL 中的另一个数据集时,则指定为 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 如果类是 A,则它将输出定向到打印机,如果类是 *,则它将输出定向到与 JOB 语句中的 MSGCLASS 参数相同的目标。 |
示例
以下是一个示例,它使用了 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=*