首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从VSAM文件中删除记录的逻辑

从VSAM文件中删除记录的逻辑
EN

Stack Overflow用户
提问于 2018-01-31 16:45:39
回答 1查看 2.5K关注 0票数 0

我有作为VSAM文件的输入文件和从JCL传递的Parm值。如果这两项匹配,则需要从输入VSAM文件中删除该记录。请你能给我在Cobol代码中的逻辑。

EN

回答 1

Stack Overflow用户

发布于 2018-01-31 20:07:59

我已经假定从JCL传递的PARM值是VSAM文件的主键。请检查以下代码是否符合您的要求。

在VSAM文件中,您将有一个6字节的字段用于员工ID (充当关键字)和20字节的字段用于员工姓名。从JCL传递的PARM值是员工ID。VSAM文件的访问模式是随机的,PARM值用于删除VSAM文件中的记录(如果存在)。

代码语言:javascript
复制
ID DIVISION.                             
PROGRAM-ID. VSAM01.                      
ENVIRONMENT DIVISION.                    
INPUT-OUTPUT SECTION.                    
FILE-CONTROL.                            
    SELECT VSAMKSDS ASSIGN TO VSAMKSDS   
    ORGANIZATION IS INDEXED              
    ACCESS MODE IS RANDOM               
    RECORD KEY IS ASSOC-ID               
    FILE STATUS IS WS-VSAM-ST.           
DATA DIVISION.                           
FILE SECTION.                            
FD VSAMKSDS.                             
01 IN-RECORD.                            
   05 ASSOC-ID          PIC X(6).        
   05 FILLER            PIC X(1).        
   05 ASSOC-NAME        PIC X(20).       
WORKING-STORAGE SECTION.                 
01 WS-SWITCHES.                          
   05 WS-EOF            PIC X(1).        
      88 EOF            VALUE 'Y'.       
      88 NOT-EOF        VALUE 'N'.       
01 WS-DELETE            PIC 9(2) VALUE 0.
01 WS-VSAM-ST           PIC X(2).        
LINKAGE SECTION.                       
01 LS-PARM-INFO.                       
   05 WS-PARM-LENGTH    PIC S9(4) COMP.
   05 WS-PARM           PIC X(6).      
PROCEDURE DIVISION USING LS-PARM-INFO. 
    PERFORM OPEN-PARA.                 
    PERFORM PROCESS-PARA.              
    PERFORM CLOSE-PARA.                

OPEN-PARA.                             
    OPEN I-O VSAMKSDS                  
    IF WS-VSAM-ST NOT EQUAL '00'       
    PERFORM ERROR-PARA.                

PROCESS-PARA.                          
    MOVE WS-PARM TO ASSOC-ID.          
    DELETE VSAMKSDS.                   
    EVALUATE WS-VSAM-ST                
    WHEN '00'                          
    DISPLAY 'RECORD DELETED'           
    ADD 1 TO WS-DELETE                 
    WHEN '23'                          
    DISPLAY 'NOT FOUND:' WS-PARM       
    WHEN OTHER                         
    PERFORM ERROR-PARA                 
    END-EVALUATE.                      

CLOSE-PARA.                            
    CLOSE VSAMKSDS. 
    STOP RUN.                   

ERROR-PARA.                            
    DISPLAY 'VSAM STATUS:' WS-VSAM-ST. 
    CLOSE VSAMKSDS.
    STOP RUN.                          
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48537927

复制
相关文章

相似问题

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