首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VSAM状态代码04

VSAM状态代码04
EN

Stack Overflow用户
提问于 2011-09-07 18:08:42
回答 2查看 12.8K关注 0票数 1

我正在运行一个COBOL pgm,它读取一个VSAM文件。下面是我的pgm中的输入输出部分。

文件控制。

代码语言:javascript
复制
 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中)

代码语言:javascript
复制
 COPY INPUTREC.    

当我运行这个pgm时,它失败了,文件状态代码=04。在某个地方,我发现在FD中,我们只有一条记录,即使文件是VB,它也将其视为FB。所以FB应该有record contains或Varying子句。

当我将我的FD更新为。

文件节。

FD输入-文件是外部的

代码语言:javascript
复制
 RECORD VARYING IN SIZE FROM 1 TO 215.     COPY INPLAYOUT.                       

工作运行得很好。

我有一个疑问,我是否可以指定这个变化的子句到最大长度,比如如果我写这个,例如记录的大小从1到2500变化。那会有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-07 19:53:20

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

VARYING子句只是告诉COBOL在缓冲区中为最大预期记录大小预留足够的空间,并指示文件包含的记录在每次I/O调用时大小都会有所不同。如果它是FB (固定块),COBOL期望记录是一个恒定的大小,并且如果记录偏离期望的大小将触发状态码04。对于VB (可变块),如果您的记录大小超过定义的最大变化限制,则仍可能出现返回代码04。

就我个人而言,我发现COBOL I/O状态条件有点难以理解。

下面是ANSI COBOL I/O状态码表,我将其放在手边用于文件i/o调试:

代码语言:javascript
复制
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.
票数 5
EN

Stack Overflow用户

发布于 2011-11-09 17:12:52

读取可变记录布局文件的COBOL程序给出的文件状态码为004。但是在文件节中指定了VARYING子句之后,一切都很顺利。

给出文件状态代码为04的代码:

代码语言:javascript
复制
FD  XXXXX-FILE                                 
RECORDING MODE IS V                        
BLOCK CONTAINS 0 RECORDS
LABEL RECORDS STANDARD.   

指定VARYING子句后,文件状态码为00:

代码语言:javascript
复制
FD  XXXXX-FILE             
RECORDING MODE IS V    
RECORD IS VARYING IN SIZE FROM 01 TO 2598
BLOCK CONTAINS 0 RECORDS
LABEL RECORDS STANDARD.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7332104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档