【问题标题】:File status 39 in VSAM KSDS fileVSAM KSDS 文件中的文件状态 39
【发布时间】:2022-03-11 23:27:11
【问题描述】:

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。 所有字段记录都匹配,但问题仍未解决。请帮我解决它。

【问题讨论】:

  • 你的钥匙开始于位置1 但KEYS 的第二个参数是抵消.你试过KEYS(05 0)吗?

标签: file cobol mainframe jcl vsam


【解决方案1】:

您提供的数据显示记录长度为 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).          

【讨论】:

  • 使用密钥 (5 0) 创建了新的 KSDS 文件。它现在工作正常。
  • 非常好,那些有时 0 是第一个而其他 1 是第一个的 dang 偏移量……祝你好运
  • 为确保正确提出问题……是否应更改上述记录格式?来自:RBA Len 1<==5>..10。致:RBA Len <===>...10。 ?
猜你喜欢
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多