VSAM KSDS 文件中的文件状态 39

File status 39 in VSAM KSDS file

Vsam 文件创建 -

//VSAMKSDS JOB CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1),PRTY=15,    
//             NOTIFY=&SYSUID                                
//STEP10 EXEC PGM=IDCAMS                                     
//SYSPRINT DD SYSOUT=*                                       
//SYSIN DD *                                                 
        DEFINE CLUSTER(                 -                    
                  NAME(RAHUL.KSDS.FILE) -                    
                  INDEXED               -                    
                  KEYS(05 1)            -                    
                  RECSZ(35 35)          -                    
                  FREESPACE(10 20)      -                    
                  TRACKS(50 30)         -                    
                  CISZ(8192)            -                    
                  VOLUME(ZASYS1))                            
/*                                      

                 

文件中的记录-

    RBA          Len     1<==5>..10....5...20....5...30....5..
      0           35     12543rajjd jdhdjd        9876553     
     35           35     53221dfdffd jhsfhd       9778785  

获取错误 -


KSDSFL 打开状态 39
KSDSFL 关闭状态 42


我的 Cobol 程序:-

 IDENTIFICATION DIVISION.              
 PROGRAM-ID. KSDSPROG.                 
 ENVIRONMENT DIVISION.                 
 INPUT-OUTPUT SECTION.                 
 FILE-CONTROL.                         
     SELECT KSDSFL ASSIGN TO INFLDD    
     ORGANIZATION IS INDEXED           
     ACCESS MODE IS RANDOM             
     RECORD KEY IS EMP-ID              
     FILE STATUS IS RTCODE.            
 DATA DIVISION.                        
 FILE SECTION.                         
 FD KSDSFL.                            
 01 KSDSFL-REC.                        
    05 EMP-ID      PIC X(05).          
    05 EMP-DESC    PIC X(30).          
WORKING-STORAGE SECTION.                      
01 RTCODE         PIC X(02).                  
01 REC-OUT        PIC X(35).                  
PROCEDURE DIVISION.                           
    OPEN INPUT KSDSFL.                        
    DISPLAY 'KSDSFL OPEN STATUS ' RTCODE.     
    MOVE '12345' TO EMP-ID                    
    READ KSDSFL RECORD INTO REC-OUT           
    KEY IS EMP-ID                             
    INVALID KEY                               
    DISPLAY 'KEY IS INVALID'                  
    NOT INVALID KEY                           
    DISPLAY 'KEY IS VALID'                    
    END-READ.                                 
    CLOSE KSDSFL.                             
    DISPLAY 'KSDSFL CLOSE STATUS ' RTCODE.    
    STOP RUN.        

不知道为什么我会遇到数据不匹配的问题。程序编译成功,但在 运行 上获取文件状态 39。 所有字段记录都匹配但问题仍未解决。请帮我解决一下。

您提供的数据显示记录长度为37,应该是35。

我修改了记录的问题部分以使其编码,因此有一个固定宽度的字体,因为它让我在记录排列的地方感到困惑。如有错误请指正。

您在 FD 部分 (EMP-ID) 中的密钥从偏移量 0 开始;它应该是偏移量 1.

 FILE SECTION.                         
 FD KSDSFL.                            
 01 KSDSFL-REC.                        
    05 EMP-ID      PIC X(05).          
    05 EMP-DESC    PIC X(30).          

改为

 FILE SECTION.                         
 FD KSDSFL.                            
 01 KSDSFL-REC.                        
    05 FILLER      PIC X.
    05 EMP-ID      PIC X(05).          
    05 EMP-DESC    PIC X(29).