У меня есть входной файл в виде файла VSAM и значение Parm, переданное из JCL. если эти два совпадают, запись необходимо удалить из входного файла VSAM. Пожалуйста, не могли бы вы дать мне логику в коде Cobol для этого.
Логика удаления записи из файла VSAM
Ответы (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