COBOL-使用相对和动态选项打开顺序数据集时的文件状态37

时间:2018-11-08 17:43:12

标签: file io cobol zos

我正在尝试打开一个顺序数据集。

我的文件状态为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,因此我检查了IBMrelevant docs,但找不到任何原因导致我的文件无法在输入模式下打开。

这是我的数据集的特征: ISPF dataset info screen

以及VSAM列表猫的结果: VSAM listcat result

3 个答案:

答案 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文件:

table from IBM doc

问题:输入文件当前不是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文件。如果只是顺序数据集,则也不需要密钥。