2011-09-07 145 views
0

我正在运行一个正在读取一个VSAM文件的COBOL PGM。 下面是我的pgm中的输入输出部分。VSAM状态码04

文件控制。

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条目如下。

FILE SECTION。

FD输入文件是外部的(因为这是在sub pgm中)
COPY INPUTREC。

当我运行此pgm时,它失败,文件状态码= 04。 某处我发现在FD中我们只有一条记录,即使文件是VB,它也将它视为FB。所以FB应该有记录包含或变化条款。

当我更新我的FD到。

FILE SECTION。

FD输入文件是外部的
记录的大小从1到215不等。 COPY INPLAYOUT。

工作正常。

我有一个疑问我可以指定这个变化的子句的最大长度,就像我写这个例如RECORD VARYING IN SIZE从1到2500.那么它会导致任何问题?

回答

4

假设您的VSAM文件已正确初始化,并且您的JCL编码与您的程序要求一致,则应该没有问题。

VARYING子句只是告诉COBOL在最大预期记录大小的缓冲区中保留足够的空间,并指出该文件包含的预计大小从一次I/O调用到下一次调用的大小不一。如果它是FB(固定块),COBOL预计记录是一个恒定的大小,并且如果记录偏离了预期的大小,将触发状态码04。对于VB(变量块),如果您的记录大小超过VARYING定义的最大限制,则仍可能发生返回码04。

就我个人而言,我发现COBOL I/O状态条件有点神秘。

这是ANSI COBOL I/O状态代码,我保持方便的文件I/O调试目的的表:

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

COBOL程序读取一个varable记录布局文件给文件状态码但在指定FILE SECTION中的VARYING子句之后,它没有问题。这给了文件的状态代码为04

代码:

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

指定变条款后,文件状态代码为00:

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