COBOL - Состояние файла 37 при открытии последовательного набора данных с относительными и динамическими параметрами - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь открыть последовательный набор данных.

Я получаю статус файла 37, для которого IBM говорит:

Была предпринята попытка выполнить оператор OPEN для файла, который не поддерживает открытый режим, указанный в операторе OPEN. Возможные нарушения:

  • Задана фраза EXTEND или OUTPUT, но файл не будет поддерживать операции записи.
  • Указана фраза ввода-вывода, но файл не поддерживает разрешенные операции ввода и вывода.
  • Указана фраза 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

И DD-карта в моем JCL выглядит так:

EXAMPLE DD DISP=SHR,DSN=MY.DATASET.NAME

Мы используем COBOL v5, поэтому я проверил IBM соответствующих документов , но я не могу найти причину, по которой мой файл не открывается в режиме ввода.

Вот характеристики моего набора данных: ISPF dataset info screen

И результат списка VSAM: VSAM listcat result

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

В вашей программе ORGANIZATION IS RELATIVE означает, что входной файл должен быть файлом VSAM набора относительных записей (RRDS), который можно определить с помощью команды IDCAMS DEFINE. Может случиться так, что если файл, который вы открываете, является последовательным файлом, вы получите статус файла 37. Дополнительная информация о IDCAMS DEFINE упоминается в разделе 1.5.3 IBM Redbook "VSAM Demystified", ' Относительная запись набор данных '.

Вы можете сделать входной файл файлом VSAM, например, следующим образом:

//[YOURID]  JOB ,
// MSGCLASS=S,REGION=0M,COND=(9,LT),NOTIFY=&SYSUID,TIME=(1,1)
//*********************************************************************
//* Create a VSAM
//*********************************************************************
//S1IDCAMS   EXEC  PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
DELETE   ([YOURID].P00695.VSAMRRDS) CLUSTER PURGE
DEFINE CLUSTER (NAME([YOURID].P00695.VSAMRRDS)   -
           NUMBERED                                -
           RECORDSIZE(80 80)                      -
           BUFFERSPACE(2048)                       -
           SHAREOPTIONS(4 3)                       -
           VOLUMES(SYS162))                        -
   DATA    (NAME([YOURID].P00695.VSAMRRDS.DATA) -
           TRACK(1,1)                              -
           CISZ (1024))
/*
//S2REPRO    EXEC  PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//VSAM  DD DISP=SHR,DSN=[YOURID].P00695.VSAMRRDS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
REPRO OUTFILE(VSAM) INFILE(INREC)
/*
//INREC  DD *
XXXXXXX060ALISONALISONALISONALISONALISONALISONALISONALISONAL        ISONALIS
XXXXXXX060ALISONALISONALISONALISONALISONALISONALISONALISONAL        ISONALIS
/*
0 голосов
/ 12 ноября 2018

Если вы хотите открыть последовательный набор данных для чтения, вам нужно открыть его для ввода (готово!), Иметь его в JCL с DISP = SHR (вы можете попробовать с OLD, но не нужно),И иметь ДОСТУП ПОСЛЕДОВАТЕЛЬНО.

ДОСТУП К ОТНОШЕНИЮ, как отмечают другие пользователи, предназначен только для VSAM, и ваш вывод IDCAMS показывает, что это не файл VSAM.Если это просто последовательный набор данных, вам также не нужен ключ.

0 голосов
/ 09 ноября 2018

В документах IBM, связанных в вопросе (стр. 126: абзац FILE-CONTROL), говорится, что режим относительного доступа доступен только для файлов VSAM:

table from IBM doc

Проблема: входной файл в настоящее время не является файлом VSAM.

Решение: сделать входной файл файлом VSAM.

Это сработало:

DD-карта в JCL при создании входного файла:

//FOO      DD DISP=(NEW,CATLG,DELETE),
//         SPACE=(TRK,(1000,1000),RLSE),
//         LRECL=300,
//         RECORG=RR,
//         DSN=MY.DATASET.NAME

Параметр RECORG делает набор данных 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
         .
...