Код статуса VSAM 04 - PullRequest
       38

Код статуса VSAM 04

0 голосов
/ 07 сентября 2011

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

FILE-CONTROL.

 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 ВНЕШНИЙ (как это указано в sub pgm)
КОПИЯ INPUTREC.

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

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

РАЗДЕЛ ФАЙЛА.

ВХОДНОЙ ФАЙЛ FD ВНЕШНИЙ
ЗАПИСЬ, РАЗЛИЧНАЯ В РАЗМЕРЕ ОТ 1 ДО 215. КОПИЯ ВХОД.

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

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

Ответы [ 2 ]

4 голосов
/ 07 сентября 2011

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

Предложение VARYING просто говорит COBOL зарезервировать достаточно места в буфере для максимального ожидаемого размера записи и указывает, что файл содержит записи, размер которых, как ожидается, будет варьироваться от одного вызова ввода-вывода до следующего.Если это был FB (фиксированный блок), COBOL ожидает, что запись будет иметь постоянный размер, и вызовет код состояния 04, если запись отклоняется от ожидаемого размера.Для VB (Variable Block) код возврата 04 все еще может появиться, если размер вашей записи превышает максимальный определенный VARYING предел.

Лично я нахожу условия состояния ввода / вывода 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.
0 голосов
/ 09 ноября 2011

Программа COBOL, которая считывает файл макета пригодной для записи записи, задала код состояния файла как 004. Но после задания условия VARYING в разделе РАЗДЕЛ ФАЙЛА все прошло нормально.

Код, который дал код состояния файла как 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.
...