将记录追加到现有文件
如果我想将记录附加到现有文件,我需要使用哪些 DISP 参数?
If I want to append records to an existing file what DISP parameters do I need to use?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如果我想将记录附加到现有文件,我需要使用哪些 DISP 参数?
If I want to append records to an existing file what DISP parameters do I need to use?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
DISP=MOD
这将附加到现有顺序数据集的末尾。如果指定的数据集尚不存在,则会创建该数据集(在这种情况下 DISP=MOD 和 DISP=NEW 是等效的)
请注意以下事项:
多卷数据集
DISP= 的行为MOD
根据您是否指定而变化特定的体积。您应该查看此 参考
对于规则
分区数据集
如果您在 DSNAME 参数中指定成员名称,
成员名称不得已存在。系统将读/写机制置于末尾
数据集的。如果成员名称已存在,系统将终止作业。
如果您不指定成员名称,
系统将读/写机制定位在数据集的末尾。系统
不会自动进入目录。
将数据添加到 PDS/PDSE 成员的末尾是一个技巧。你通常必须
删除并重写整个成员并添加新记录。
顺序数据集和 COBOL OPEN 动词
存在一些“相互作用”
在 JCL 中给出的
DISP
和 COBOLOPEN
动词之间。如果您在 JCL 中指定
DISP=MOD
,COBOL 程序会将记录添加到OPEN OUTPUT
和OPEN EXTEND
的顺序数据集的末尾。如果您在 JCL 中指定 DISP=OLD,COBOL 程序会将记录添加到
OPEN EXTEND
的顺序数据集的末尾。如果您将顺序数据集打开为OPEN OUTPUT
,数据集的原始内容被删除,您将有效
再次从空数据集开始(就像您已删除并重新分配它一样)。
VSAM 数据集
虚拟存储访问方法 (VSAM) 文件是完全不同的
一壶鱼。 VSAM数据集有多种组织:
每个组织都有自己的特点和用途。
VSAM 数据集必须先预定义,然后 COBOL 程序才能引用它们。这通常作为单独的
IDCAMS 作业。一次
VSAM数据集已
定义,它
可以通过 COBOL(或其他)程序访问。这
参考提供
关于在 COBOL 下操作 VSAM 数据集的一个很好的概述。该部分:将记录添加到 VSAM 数据集
涵盖从 COBOL 程序向 VSAM 数据集添加记录的细节。使用
OPEN EXTEND
COBOL open 语句的版本,用于将记录添加到现有 ESDS 或 KSDS VSAM 数据集的末尾。笔记
对于 KSDS 数据集,必须按照密钥的升序添加记录。
用于将 VSAM 数据集连接到程序的 JCL 实际上非常简单,并且是
此处进行了描述。
对于现有 VSAM 数据集,使用
DISP=MOD
与DISP=OLD
相同(使用任一 - 它不会产生任何影响)不同之处)。如果您不更新,请使用
DISP=SHR
数据集并且不希望阻止其他程序并发访问。
DISP=MOD
This will append to the end of an existing sequential dataset. If the specified dataset does not yet exist, it will be created (in this case DISP=MOD and DISP=NEW are equivalent)
Beware of the following:
Multi-Volume Datasets
Behaviour of
DISP=MOD
varies depending on whether or not you specifya specific volume. You should review this reference
for the rules
Partitioned Datasets
If you specify a member name in the DSNAME parameter,
the member name must not already exist. The system positions the read/write mechanism at the end
of the data set. If the member name already exists, the system terminates the job.
If you do not specify a member name,
the system positions the read/write mechanism at the end of the data set. The system
does not make an automatic entry into the directory.
Adding data to the end of a member of a PDS/PDSE is a bit of a trick. You generally have to
delete and rewrite the entire member with the new records added to it.
Sequential Datasets and the COBOL OPEN verb
There is some "interplay"
between the
DISP
given in JCL and the COBOLOPEN
verb.If you specify
DISP=MOD
in your JCL, a COBOL program will add records to theend of a sequential dataset for both
OPEN OUTPUT
andOPEN EXTEND
.If you specify
DISP=OLD
in your JCL, a COBOL program will add records to theend of a sequential dataset for
OPEN EXTEND
. If you open the sequential dataset asOPEN OUTPUT
,the original contents of the dataset are deleted and you will effectively
be starting with an empty dataset again (just as if you had deleted and reallocated it).
VSAM Datasets
Virtual Storage Access Method (VSAM) files are a whole different
kettle of fish. VSAM datasets come in a variety of organizations:
Each of organization has its own characteristics and usages.
VSAM datasets must be pre-defined before a COBOL program may reference them. This is often done as a separate
IDCAMS job. Once
the VSAM dataset has been
defined, it
may accessed through a COBOL (or other) program. This
reference provides
a good overview for manipulating VSAM datasets under COBOL. The section: Adding records to a VSAM dataset
covers the specifics of adding records to a VSAM dataset from a COBOL program. Use the
OPEN EXTEND
version of the COBOL open statement to add records to the end of an existing ESDS or KSDS VSAM dataset. Note
that for KSDS datasets, records must be added in increasing order with respect to the key.
The JCL used to connect a VSAM dataset to program is actually pretty simple, and is
described here.
Using
DISP=MOD
is the same asDISP=OLD
for existing VSAM datasets (use either one - it makes nodifference). Use
DISP=SHR
if you are not updatingthe dataset and do not want to block other programs from concurrent access.