如果我想将记录附加到现有文件中,我需要使用哪些 DISP 参数?
1 回答
DISP=MOD
这将附加到现有顺序数据集的末尾。如果指定的数据集尚不存在,则会创建它(在这种情况下 DISP=MOD 和 DISP=NEW 是等价的)
请注意以下事项:
多卷数据集
的行为DISP=MOD
取决于您是否指定特定卷。您应该查看此参考
以了解规则
分区数据集
如果您在 DSNAME 参数中指定成员名称,则该成员名称必须不存在。系统将读/写机制置于数据集的末尾。如果成员名称已存在,则系统终止作业。
如果不指定成员名称,系统会将读/写机制置于数据集的末尾。系统不会自动进入目录。
将数据添加到 PDS/PDSE 成员的末尾有点小技巧。您通常必须删除并重写添加新记录的整个成员。
顺序数据集和 COBOL OPEN 动词
DISP
JCL 中的给定和 COBOLOPEN
动词之间存在一些“相互作用” 。
如果您DISP=MOD
在 JCL 中指定,COBOL 程序将在顺序数据集的末尾添加OPEN OUTPUT
和的记录OPEN EXTEND
。
如果您DISP=OLD
在 JCL 中指定,COBOL 程序会将记录添加到OPEN EXTEND
. 如果您将顺序数据集打开为OPEN OUTPUT
,则数据集的原始内容将被删除,您将有效地再次从一个空数据集开始(就像您已删除并重新分配它一样)。
VSAM 数据集
虚拟存储访问方法 (VSAM) 文件完全不同。VSAM 数据集来自各种组织:
- KSDS(关键序列数据集)
- ESDS(输入序列数据集)
- RRDS(相对记录数据集)
- LSD(线性空间数据集)
每个组织都有自己的特点和用途。
VSAM 数据集必须在 COBOL 程序引用它们之前进行预定义。这通常作为单独的
IDCAMS作业完成。一旦定义了 VSAM 数据集,就可以通过 COBOL(或其他)程序对其进行访问。本
参考资料很好地概述了在 COBOL 下操作 VSAM 数据集。部分:将记录添加到 VSAM 数据集
涵盖了从 COBOL 程序将记录添加到 VSAM 数据集的细节。使用OPEN EXTEND
COBOL open 语句的版本将记录添加到现有 ESDS 或 KSDS VSAM 数据集的末尾。请注意,对于 KSDS 数据集,必须按照键的递增顺序添加记录。
用于将 VSAM 数据集连接到程序的 JCL 实际上非常简单,在此处进行了描述。使用DISP=MOD
与DISP=OLD
现有 VSAM 数据集相同(使用任何一个 - 没有区别)。如果DISP=SHR
您不更新数据集并且不想阻止其他程序进行并发访问,请使用此选项。