我正在尝试打开一个顺序数据集。
我的文件状态为37,IBM表示:
尝试在不支持该文件的文件上执行OPEN语句 OPEN语句中指定的打开模式。可能的违规行为是:
- 已指定EXTEND或OUTPUT短语,但该文件不支持写操作。
- 已指定I-O短语,但文件不支持允许的输入和输出操作。
- 指定了INPUT短语,但文件不支持读取操作。
我怀疑第三个,因为程序的相关位是:
*----------------------
INPUT-OUTPUT SECTION.
*----------------------
FILE-CONTROL.
* input file 1
SELECT INPUT-1-FILE
ASSIGN TO EXAMPLE
ORGANIZATION IS RELATIVE
ACCESS MODE IS DYNAMIC
RELATIVE KEY IS INPUT-1-ACCESS-KEY
FILE STATUS IS INPUT-1-FS
.
****************
DATA DIVISION.
****************
*--------------
FILE SECTION.
*--------------
* fichier 1
FD INPUT-1-FILE
.
01 INPUT-1-LINE.
05 filler PIC X(300).
*-------------------------
WORKING-STORAGE SECTION.
*-------------------------
77 INPUT-1-ACCESS-KEY PIC 9(3) comp value 1.
01 INPUT-1-FS PIC 99 value 00.
*********************
PROCEDURE DIVISION.
*********************
OPEN INPUT INPUT-1-FILE
DISPLAY INPUT-1-FS
JCL中的DD卡看起来像:
EXAMPLE DD DISP=SHR,DSN=MY.DATASET.NAME
我们使用的是COBOL v5,因此我检查了IBM的relevant docs,但找不到任何原因导致我的文件无法在输入模式下打开。
这是我的数据集的特征:
以及VSAM列表猫的结果:
答案 0 :(得分:2)
在您的程序中,ORGANIZATION IS RELATIVE
表示输入文件必须是相对记录数据集(RRDS
)VSAM文件,可以使用IDCAMS DEFINE
命令进行定义。可能发生的情况是,如果打开的文件是顺序文件,则文件状态为37。IBMRedbook“ VSAM揭秘”一节1.5.3,'{{3 }}'。
您可以使用以下内容将输入文件变成VSAM文件:
IDCAMS DEFINE
答案 1 :(得分:1)
在问题中链接的IBM文档(第126页:FILE-CONTROL段落)中,相对访问模式仅适用于VSAM文件:
问题:输入文件当前不是VSAM文件。
解决方案:将输入文件设置为VSAM文件。
这有效:
创建输入文件时,在JCL中DD卡:
//FOO DD DISP=(NEW,CATLG,DELETE),
// SPACE=(TRK,(1000,1000),RLSE),
// LRECL=300,
// RECORG=RR,
// DSN=MY.DATASET.NAME
RECORG parameter使数据集成为RRDS。这些行没有容易定义的键,因此我不能使用KSDS,我需要随机访问,所以也没有ESDS。
用于读取数据集的DD卡:
//BAR DD DISP=SHR,DSN=MY.DATASET.NAME
然后在COBOL程序中(在FILE-CONTROL
中):
SELECT INPUT-FILE
ASSIGN TO BAR
ORGANIZATION IS RELATIVE
ACCESS MODE IS DYNAMIC
RELATIVE KEY IS INPUT-FILE-KEY
FILE STATUS IS INPUT-FILE-STATUS
.
答案 2 :(得分:0)
如果要打开顺序数据集以进行读取,则需要将其打开以进行输入(已完成!),将其放入JCL中,使用DISP = SHR(可以尝试使用OLD,但不需要它),并具有访问权限。
如其他用户所述,访问相对”仅适用于VSAM,并且您的IDCAMS输出显示这不是VSAM文件。如果只是顺序数据集,则也不需要密钥。