Логика удаления записи из файла VSAM

У меня есть входной файл в виде файла VSAM и значение Parm, переданное из JCL. если эти два совпадают, запись необходимо удалить из входного файла VSAM. Пожалуйста, не могли бы вы дать мне логику в коде Cobol для этого.


person Sunitha S    schedule 31.01.2018    source источник


Ответы (1)


Я предположил, что значение PARM, переданное из JCL, является первичным ключом в файл VSAM. Пожалуйста, просмотрите следующий код и проверьте, соответствует ли он вашим требованиям.

В файле VSAM у вас будет 6-байтовое поле для идентификатора сотрудника (действующее как ключ) и 20-байтовое поле для имени сотрудника. Значение PARM, переданное из JCL, является идентификатором сотрудника. Режим доступа к файлу 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.                          
person Srinivasan JV    schedule 31.01.2018