Код состояния VSAM 04

Я запускаю один COBOL pgm, который читает один файл VSAM. Ниже находится раздел ввода-вывода в моем файле pgm.

ФАЙЛ-КОНТРОЛЬ.

 SELECT INPUT-FILE         ASSIGN TO DDINPUT             
                           ORGANIZATION IS INDEXED           
                           ACCESS MODE  IS RANDOM            
                           RECORD KEY   IS INPUT-KEY                                
                           FILE STATUS  IS WS-INPUT-STATUS.

и запись FD выглядит следующим образом.

ФАЙЛОВЫЙ РАЗДЕЛ.

FD ВХОДНОЙ ФАЙЛ ЯВЛЯЕТСЯ ВНЕШНИМ (поскольку он находится в подпрограмме)
КОПИРОВАТЬ ВХОДНОЙ РЕЗУЛЬТАТ.

Когда я запустил этот pgm, он потерпел неудачу с кодом состояния файла = 04. Где-то я нашел, что когда в FD у нас есть только одна запись, даже если файл VB, он трактует это как FB. Таким образом, FB должен иметь запись, содержащую или переменную.

Когда я обновил свой FD до .

ФАЙЛОВЫЙ РАЗДЕЛ.

FD INPUT-FILE IS EXTERNAL
ЗАПИСЬ РАЗМЕРА ОТ 1 ДО 215.

работа пошла нормально.

У меня есть одно сомнение. Могу ли я указать максимальную длину этого предложения Varying, например, если я напишу это, например, RECORD VARYING IN SIZE FROM 1 TO 2500. тогда это вызовет какие-либо проблемы?


person Manasi    schedule 07.09.2011    source источник


Ответы (2)


Предполагая, что ваш файл VSAM правильно инициализирован, а код JCL соответствует требованиям вашей программы, проблем быть не должно.

Предложение VARYING просто сообщает COBOL о необходимости зарезервировать достаточно места в буфере для максимального ожидаемого размера записи и указывает, что файл содержит записи, размер которых, как ожидается, будет меняться от одного вызова ввода-вывода к другому. Если бы это был FB (фиксированный блок), COBOL ожидает, что запись будет иметь постоянный размер, и вызовет код состояния 04, если размер записи отклоняется от ожидаемого. Для VB (переменный блок) код возврата 04 может по-прежнему возникать, если размер вашей записи превышает максимальный РАЗЛИЧНЫЙ установленный предел.

Лично я нахожу условия состояния ввода-вывода COBOL несколько загадочными для понимания.

Вот таблица кодов состояния ввода-вывода ANSI COBOL, которую я держу под рукой для целей отладки файлового ввода-вывода:

0x - Successful Completion
00 - No futher information
02 - Duplicate Key detected
04 - Wrong Length Record
05 - File created when opened.  With sequential VSAM 00 is returned.
07 - CLOSE with NO REWIND or REEL for non-tape dataset.

1x - End of File conditions
10 - No futher information
14 - Relative record READ outside boundry.

2x - Invalid Key condition
21 - Sequence Error
22 - Duplicate Key
23 - No Record found
24 - Key outside boundry

3x - Permanent I/O Errors
30 - No further information
34 - Record outside file boundry
35 - OPEN and required file not found.
37 - OPEN with invalid mode
38 - OPEN of file closed with a LOCK
39 - OPEN unsuccessful due to conflicting file attributes

4x - Logic Errors
41 - OPEN of file already open
42 - CLOSE of file not open
43 - READ  not executed before REWRITE
44 - REWRITE of different size record
46 - READ after EOF reached
47 - READ attempted for file not opened I-O or EXTEND
48 - WRITE for file not opened OUTPUT, I-O, or EXTEND
49 - DELETE or REWRITE for file not opened I-O

9x - Specific Compiler defined exceptions
90 - No further information
91 - VSAM Password failure
92 - Logic Error
93 - VSAM Resource unavailable
94 - VSAM Sequence record not available
95 - VSAM invalid or incomplete file information
96 - VSAM no DD statement
97 - VSAM OPEN successful, file integrity verified.
person MikeC    schedule 07.09.2011

Программа COBOL, которая считывает файл макета переменной записи, дала код состояния файла как 004. Но после указания предложения VARYING в FILE SECTION все прошло нормально.

Код, который дал код состояния файла как 04:

FD  XXXXX-FILE                                 
RECORDING MODE IS V                        
BLOCK CONTAINS 0 RECORDS
LABEL RECORDS STANDARD.   

После указания предложения VARYING код состояния файла равен 00:

FD  XXXXX-FILE             
RECORDING MODE IS V    
RECORD IS VARYING IN SIZE FROM 01 TO 2598
BLOCK CONTAINS 0 RECORDS
LABEL RECORDS STANDARD.
person Community    schedule 09.11.2011