我有作为VSAM文件的输入文件和从JCL传递的Parm值。如果这两项匹配,则需要从输入VSAM文件中删除该记录。请你能给我在Cobol代码中的逻辑。
发布于 2018-01-31 20:07:59
我已经假定从JCL传递的PARM值是VSAM文件的主键。请检查以下代码是否符合您的要求。
在VSAM文件中,您将有一个6字节的字段用于员工ID (充当关键字)和20字节的字段用于员工姓名。从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. https://stackoverflow.com/questions/48537927
复制相似问题