0

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

4

1 回答 1

1

我假设从 JCL 传递的 PARM 值是 VSAM 文件的主键。请浏览以下代码并检查它是否符合您的要求。

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

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.                          
于 2018-01-31T12:07:59.187 回答