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 INPUT-FILE Е ВЪНШЕН (тъй като това е в sub pgm)
COPY INPUTREC.

Когато стартирах този pgm, той се провали с код за състояние на файла =04. Някъде открих, че когато във FD имаме само един запис, дори ако файлът е VB, той третира, че е FB. Така че FB трябва да има запис съдържа или клауза Varying.

Когато актуализирах своя FD до.

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

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

работата вървеше добре.

Имам едно съмнение. Мога ли да посоча тази Varying клауза на максимална дължина, като например, ако напиша това като напр. ЗАПИС С ПРОМЕНЛИВ РАЗМЕР ОТ 1 ДО 2500. тогава ще причини ли проблем?


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


Отговори (2)


Ако приемем, че вашият VSAM файл е правилно инициализиран и вашият JCL е кодиран в съответствие с вашите програмни изисквания, не би трябвало да има проблем.

Клаузата VARYING просто казва на COBOL да запази достатъчно място в буфера за максималния очакван размер на записа и показва, че файлът съдържа записи, които се очаква да варират по размер от едно I/O извикване до следващото. Ако беше FB (фиксиран блок), COBOL очаква записът да бъде с постоянен размер и ще задейства код на състояние 04, ако записът се отклонява от очаквания размер. За VB (променлив блок) все още може да възникне код за връщане 04, ако размерът на вашия запис надвишава максималния VARYING дефиниран лимит.

Лично аз намирам условията на COBOL I/O Status за малко загадъчни за разбиране.

Ето таблица с 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