我有输入文件作为 VSAM 文件和从 JCL 传递的 Parm 值。如果这两个匹配,则需要从输入 VSAM 文件中删除记录。请你给我 Cobol 代码中的逻辑。
问问题
2728 次
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 回答