0% found this document useful (0 votes)
8 views

Db2 Programm

The document outlines a job script for executing a DB2 program that processes claims data. It includes the definition of two COBOL programs, CBLDB2P1 and CBLDB2P2, which handle input and insertion of claim records into a database. The script also contains SQL statements for inserting data and managing the program's execution flow.

Uploaded by

srb120397
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views

Db2 Programm

The document outlines a job script for executing a DB2 program that processes claims data. It includes the definition of two COBOL programs, CBLDB2P1 and CBLDB2P2, which handle input and insertion of claim records into a database. The script also contains SQL statements for inserting data and managing the program's execution flow.

Uploaded by

srb120397
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 26

//IBMUSERX JOB (285),CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID,REGION=6M

//STEPDB2 EXEC PGM=IKJEFT01,DYNAMNBR=64


//STEPLIB DD DSN=DSN810.SDSNLOAD,DISP=SHR
// DD DSN=IBMUSER.T61.LOAD,DISP=SHR == LOAD MODULE
//SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(500,50))
//SYSUT4 DD UNIT=SYSDA,SPACE=(CYL,(500,50))
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
DSN S(DB8G)
RUN PROGRAM(CBLDB2P1) PLAN(S1304PL)
END
/*
//SYSIN DD *
C4444
ANIL
10000
MEDICAL
SUBMIT
2021-10-02
N
C5555
ARUN
10000
MEDICAL
SUBMIT
2021-10-02
Y
/*
//
ID DIVISION.
PROGRAM-ID. CBLDB2P1.
AUTHOR. NAME.
DATE-WRITTEN. TODAY.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.

DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC.
EXEC SQL INCLUDE DCLCLAIM END-EXEC.

01 WS-ABENDPGM PIC X(08) VALUE SPACE.


01 WS-END-OF-INPUT PIC X(01) VALUE SPACE.
01 WS-ROW-COUNT PIC 9(02) VALUE ZERO.
01 CLAIM-DETAILS.
10 CLAIM-NUMBER PIC X(5).
10 CUST-NAME.
15 CUST-NAME-LEN PIC S9(4) USAGE COMP.
15 CUST-NAME-TEXT PIC X(10).
10 CLAIM-AMOUNT PIC S9(3)V9(2).
10 CLAIM-TYPE PIC X(10).
10 CLAIM-STATUS PIC X(10).
10 CLAIM-SUB-DT PIC X(10).
10 CREATE-TS PIC X(26).
10 UPDATE-TS PIC X(26).
10 LAST-UPDT-TOKEN PIC X(10).
01 WS-SPACE-LEN PIC 9(02) VALUE ZERO.
PROCEDURE DIVISION.
000-MAIN-PARA.
DISPLAY 'CBLDB2P1 STARTED'.

MOVE 'N' TO WS-END-OF-INPUT.


PERFORM 200-GET-INPUT-PARA THRU 200-EXIT.
PERFORM 300-PROCESS-PARA THRU 300-EXIT
UNTIL WS-END-OF-INPUT = 'Y'.

DISPLAY 'ROW COUNT ' WS-ROW-COUNT.


STOP RUN.

200-GET-INPUT-PARA.
ACCEPT CLAIM-NUMBER
ACCEPT CUST-NAME-TEXT
ACCEPT CLAIM-AMOUNT
ACCEPT CLAIM-TYPE
ACCEPT CLAIM-STATUS
ACCEPT CLAIM-SUB-DT.

200-EXIT. EXIT.

300-PROCESS-PARA.
IF CLAIM-AMOUNT > 0
MOVE CLAIM-NUMBER TO DCL-CLAIM-NUMBER
MOVE ZERO TO WS-SPACE-LEN
INSPECT FUNCTION REVERSE(CUST-NAME-TEXT)
TALLYING WS-SPACE-LEN FOR LEADING SPACES

COMPUTE CUST-NAME-LEN = LENGTH OF CUST-NAME-TEXT -


WS-SPACE-LEN
MOVE CUST-NAME-LEN TO DCL-CUST-NAME-LEN
MOVE CUST-NAME-TEXT TO DCL-CUST-NAME-TEXT
MOVE CLAIM-AMOUNT TO DCL-CLAIM-AMOUNT
MOVE CLAIM-TYPE TO DCL-CLAIM-TYPE
MOVE CLAIM-STATUS TO DCL-CLAIM-STATUS
MOVE CLAIM-SUB-DT TO DCL-CLAIM-SUB-DT
MOVE 'CBLDB2P1' TO DCL-LAST-UPDT-TOKEN
PERFORM 350-INSERT-PARA THRU 350-EXIT
END-IF.
ACCEPT WS-END-OF-INPUT.
IF WS-END-OF-INPUT = 'N'
PERFORM 200-GET-INPUT-PARA THRU 200-EXIT
END-IF.
300-EXIT. EXIT.

350-INSERT-PARA.
EXEC SQL
INSERT INTO CLAIM_T61(
CLAIM_NUMBER,
CUST_NAME,
CLAIM_AMOUNT,
CLAIM_TYPE,
CLAIM_STATUS,
CLAIM_SUB_DT,
LAST_UPDT_TOKEN)
VALUES(:DCL-CLAIM-NUMBER,
:DCL-CUST-NAME,
:DCL-CLAIM-AMOUNT,
:DCL-CLAIM-TYPE,
:DCL-CLAIM-STATUS,
:DCL-CLAIM-SUB-DT,
:DCL-LAST-UPDT-TOKEN)
END-EXEC.
IF SQLCODE = 000
DISPLAY 'INSERT SUCCESFUL'
ADD +1 TO WS-ROW-COUNT
ELSE
DISPLAY 'ERROR IN 350-INSERT-PARA'
DISPLAY 'SQLCODE IS ' SQLCODE
DISPLAY 'CLAIM RECORD ' CLAIM-DETAILS
DISPLAY 'ROW COUNT ' WS-ROW-COUNT
CALL WS-ABENDPGM
END-IF.

350-EXIT. EXIT.
ID DIVISION.
PROGRAM-ID. CBLDB2P2.
AUTHOR. NAME.
DATE-WRITTEN. TODAY.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CLAIM-INFILE ASSIGN TO CLAIMDD1
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS WS-IN-STATUS.

DATA DIVISION.
FILE SECTION.
FD CLAIM-INFILE
LABEL RECORDS ARE STANDARD.
01 CLAIM-DETAILS.
10 CLAIM-NUMBER PIC X(5).
10 CUST-NAME.
15 CUST-NAME-TEXT PIC X(10).
10 CLAIM-AMOUNT PIC S9(3)V9(2).
10 CLAIM-TYPE PIC X(10).
10 CLAIM-STATUS PIC X(10).
10 CLAIM-SUB-DT PIC X(10).

WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC.
EXEC SQL INCLUDE DCLCLAIM END-EXEC.

01 WS-IN-STATUS PIC X(02) VALUE SPACE.


01 CUST-NAME-LEN PIC S9(4) USAGE COMP.
01 WS-ABENDPGM PIC X(08) VALUE SPACE.
01 WS-END-OF-FILE PIC X(01) VALUE SPACE.
01 WS-ROW-COUNT PIC 9(02) VALUE ZERO.
01 WS-SPACE-LEN PIC 9(02) VALUE ZERO.
PROCEDURE DIVISION.
000-MAIN-PARA.
DISPLAY 'CBLDB2P2 STARTED'.
PERFORM 100-INITIAL-PARA THRU 100-EXIT.
PERFORM 200-GET-INPUT-PARA THRU 200-EXIT.
PERFORM 300-PROCESS-PARA THRU 300-EXIT
UNTIL WS-END-OF-FILE = 'Y'.
CLOSE CLAIM-INFILE.
DISPLAY 'ROW COUNT ' WS-ROW-COUNT.
STOP RUN.
100-INITIAL-PARA.
MOVE 'N' TO WS-END-OF-FILE.
MOVE ZERO TO CUST-NAME-LEN WS-ROW-COUNT.
OPEN INPUT CLAIM-INFILE
IF WS-IN-STATUS NOT = '00'
DISPLAY 'ERROR IN 100-PARA'
DISPLAY 'STATUS CODE ' WS-IN-STATUS
CALL WS-ABENDPGM
END-IF.
INITIALIZE CLAIM-DETAILS.
100-EXIT. EXIT.

200-GET-INPUT-PARA.
READ CLAIM-INFILE
AT END
MOVE 'Y' TO WS-END-OF-FILE.
200-EXIT. EXIT.

300-PROCESS-PARA.
IF CLAIM-AMOUNT > 0
MOVE CLAIM-NUMBER TO DCL-CLAIM-NUMBER
MOVE ZERO TO WS-SPACE-LEN
INSPECT FUNCTION REVERSE(CUST-NAME-TEXT)
TALLYING WS-SPACE-LEN FOR LEADING SPACES

COMPUTE CUST-NAME-LEN = LENGTH OF CUST-NAME-TEXT -


WS-SPACE-LEN
MOVE CUST-NAME-LEN TO DCL-CUST-NAME-LEN
MOVE CUST-NAME-TEXT TO DCL-CUST-NAME-TEXT
MOVE CLAIM-AMOUNT TO DCL-CLAIM-AMOUNT
MOVE CLAIM-TYPE TO DCL-CLAIM-TYPE
MOVE CLAIM-STATUS TO DCL-CLAIM-STATUS
MOVE CLAIM-SUB-DT TO DCL-CLAIM-SUB-DT
MOVE 'CBLDB2P1' TO DCL-LAST-UPDT-TOKEN
PERFORM 350-INSERT-PARA THRU 350-EXIT
END-IF.
PERFORM 200-GET-INPUT-PARA THRU 200-EXIT.
300-EXIT. EXIT.

350-INSERT-PARA.
EXEC SQL
INSERT INTO CLAIM_T61(
CLAIM_NUMBER,
CUST_NAME,
CLAIM_AMOUNT,
CLAIM_TYPE,
CLAIM_STATUS,
CLAIM_SUB_DT,
LAST_UPDT_TOKEN)
VALUES(:DCL-CLAIM-NUMBER,
:DCL-CUST-NAME,
:DCL-CLAIM-AMOUNT,
:DCL-CLAIM-TYPE,
:DCL-CLAIM-STATUS,
:DCL-CLAIM-SUB-DT,
:DCL-LAST-UPDT-TOKEN)
END-EXEC.
IF SQLCODE = 000
DISPLAY 'INSERT SUCCESFUL'
ADD +1 TO WS-ROW-COUNT
ELSE
DISPLAY 'ERROR IN 350-INSERT-PARA'
DISPLAY 'SQLCODE IS ' SQLCODE
DISPLAY 'CLAIM RECORD ' CLAIM-DETAILS
DISPLAY 'ROW COUNT ' WS-ROW-COUNT
CALL WS-ABENDPGM
END-IF.

350-EXIT. EXIT.
ID DIVISION.
PROGRAM-ID. CBLDB2P2.
AUTHOR. NAME.
DATE-WRITTEN. TODAY.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CLAIM-INFILE ASSIGN TO CLAIMDD1
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS WS-IN-STATUS.

DATA DIVISION.
FILE SECTION.
FD CLAIM-INFILE
LABEL RECORDS ARE STANDARD.
01 CLAIM-DETAILS.
10 CLAIM-NUMBER PIC X(5).
10 CUST-NAME.
15 CUST-NAME-TEXT PIC X(10).
10 CLAIM-AMOUNT PIC S9(3)V9(2).
10 CLAIM-TYPE PIC X(10).
10 CLAIM-STATUS PIC X(10).
10 CLAIM-SUB-DT PIC X(10).

WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC.
EXEC SQL INCLUDE DCLCLAIM END-EXEC.

01 WS-IN-STATUS PIC X(02) VALUE SPACE.


01 CUST-NAME-LEN PIC S9(4) USAGE COMP.
01 WS-ABENDPGM PIC X(08) VALUE SPACE.
01 WS-END-OF-FILE PIC X(01) VALUE SPACE.
01 WS-ROW-COUNT PIC 9(02) VALUE ZERO.
01 WS-SPACE-LEN PIC 9(02) VALUE ZERO.
PROCEDURE DIVISION.
000-MAIN-PARA.
DISPLAY 'CBLDB2P2 STARTED'.

PERFORM 100-INITIAL-PARA THRU 100-EXIT.


PERFORM 200-GET-INPUT-PARA THRU 200-EXIT.
PERFORM 300-PROCESS-PARA THRU 300-EXIT
UNTIL WS-END-OF-FILE = 'Y'.
CLOSE CLAIM-INFILE.
DISPLAY 'ROW COUNT ' WS-ROW-COUNT.
STOP RUN.
100-INITIAL-PARA.
MOVE 'N' TO WS-END-OF-FILE.
MOVE ZERO TO CUST-NAME-LEN WS-ROW-COUNT.
OPEN INPUT CLAIM-INFILE
IF WS-IN-STATUS NOT = '00'
DISPLAY 'ERROR IN 100-PARA'
DISPLAY 'STATUS CODE ' WS-IN-STATUS
CALL WS-ABENDPGM
END-IF.
INITIALIZE CLAIM-DETAILS.
100-EXIT. EXIT.

200-GET-INPUT-PARA.
READ CLAIM-INFILE
AT END
MOVE 'Y' TO WS-END-OF-FILE.
200-EXIT. EXIT.

300-PROCESS-PARA.
IF CLAIM-AMOUNT > 0
MOVE CLAIM-NUMBER TO DCL-CLAIM-NUMBER
* MOVE ZERO TO WS-SPACE-LEN
* INSPECT FUNCTION REVERSE(CUST-NAME-TEXT)
* TALLYING WS-SPACE-LEN FOR LEADING SPACES
*
* COMPUTE CUST-NAME-LEN = LENGTH OF CUST-NAME-TEXT -
* WS-SPACE-LEN
MOVE LENGTH OF CUST-NAME-TEXT TO CUST-NAME-LEN
CALL 'STRLEN01' USING CUST-NAME-LEN , CUST-NAME-TEXT

MOVE CUST-NAME-LEN TO DCL-CUST-NAME-LEN


MOVE CUST-NAME-TEXT TO DCL-CUST-NAME-TEXT
MOVE CLAIM-AMOUNT TO DCL-CLAIM-AMOUNT
MOVE CLAIM-TYPE TO DCL-CLAIM-TYPE
MOVE CLAIM-STATUS TO DCL-CLAIM-STATUS
MOVE CLAIM-SUB-DT TO DCL-CLAIM-SUB-DT
MOVE 'CBLDB2P1' TO DCL-LAST-UPDT-TOKEN
PERFORM 350-INSERT-PARA THRU 350-EXIT
END-IF.
PERFORM 200-GET-INPUT-PARA THRU 200-EXIT.
300-EXIT. EXIT.

350-INSERT-PARA.
EXEC SQL
INSERT INTO CLAIM_T61(
CLAIM_NUMBER,
CUST_NAME,
CLAIM_AMOUNT,
CLAIM_TYPE,
CLAIM_STATUS,
CLAIM_SUB_DT,
LAST_UPDT_TOKEN)
VALUES(:DCL-CLAIM-NUMBER,
:DCL-CUST-NAME,
:DCL-CLAIM-AMOUNT,
:DCL-CLAIM-TYPE,
:DCL-CLAIM-STATUS,
:DCL-CLAIM-SUB-DT,
:DCL-LAST-UPDT-TOKEN)
END-EXEC.
IF SQLCODE = 000
DISPLAY 'INSERT SUCCESFUL'
ADD +1 TO WS-ROW-COUNT
ELSE
DISPLAY 'ERROR IN 350-INSERT-PARA'
DISPLAY 'SQLCODE IS ' SQLCODE
DISPLAY 'CLAIM RECORD ' CLAIM-DETAILS
DISPLAY 'ROW COUNT ' WS-ROW-COUNT
CALL WS-ABENDPGM
END-IF.

350-EXIT. EXIT.
//IBMUSERX JOB (285),CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID,REGION=6M
//STEPDB2 EXEC PGM=IKJEFT01,DYNAMNBR=64
//STEPLIB DD DSN=DSN810.SDSNLOAD,DISP=SHR
// DD DSN=IBMUSER.T5.LOAD,DISP=SHR == LOAD MODULE
//SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(500,50))
//SYSUT4 DD UNIT=SYSDA,SPACE=(CYL,(500,50))
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSTSIN DD *
DSN S(DB8G)
RUN PROGRAM(CLAIMPGM) PLAN(S1304PL)
END
/*
//
ID DIVISION.
PROGRAM-ID. CLAIMPGM.
AUTHOR. UR NAME.
DATE-WRITTEN. TODAY.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.

DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC.
EXEC SQL INCLUDE DCLCLAI6 END-EXEC.

EXEC SQL DECLARE C-NAME CURSOR WITH HOLD FOR


SELECT
CLAIM_NUMBER,CUST_NAME,CLAIM_AMOUNT,CLAIM_STATUS,
CLAIM_TYPE,CLAIM_SUBMIT_DT,POLCY_NUMBER
FROM CLAIM_T6
WHERE CLAIM_SUBMIT_DT >= CURRENT DATE - 1 DAY
FOR UPDATE OF CLAIM_STATUS
END-EXEC.

01 WS-NULL-IND PIC S9(04) COMP.


01 WS-ROW-COUNT PIC 9(02) VALUE ZERO.
01 WS-ABENDPGM PIC X(08) VALUE 'ABENDPGM'.
01 CLAIM-DETAILS.
03 POLICY-NUMBER PIC X(05) VALUE SPACE.
03 CLAIM-NUMBER PIC X(05) VALUE SPACE.
03 CLAIM-AMOUNT PIC 9(03)V9(2) VALUE ZERO.
03 CLAIM-SUBMIT-DT PIC X(10) VALUE SPACE.
03 SUB-RTN-CODE PIC X(02) VALUE SPACE.
03 REJECT-ERR-MSG PIC X(30) VALUE SPACE.

PROCEDURE DIVISION.
000-MAIN-PARA.
DISPLAY 'CLAIMPGM STARTED'.

EXEC SQL OPEN C-NAME END-EXEC.


IF SQLCODE NOT = 00
DISPLAY 'ERROR IN MAIN PGM '
DISPLAY 'ERROR ON OPEN CURSOR SQLCODE ' SQLCODE
CALL WS-ABENDPGM
END-IF.

PERFORM 200-FETCH-PARA THRU 200-EXIT


UNTIL SQLCODE = 100.
EXEC SQL CLOSE C-NAME END-EXEC.

DISPLAY 'TOTAL ROW COUNT ' WS-ROW-COUNT.


STOP RUN.
200-FETCH-PARA.
EXEC SQL FETCH C-NAME INTO
:DCL-CLAIM-NUMBER,
:DCL-CUST-NAME,
:DCL-CLAIM-AMOUNT,
:DCL-CLAIM-STATUS,
:DCL-CLAIM-TYPE:WS-NULL-IND,
:DCL-CLAIM-SUBMIT-DT,
:DCL-POLCY-NUMBER
END-EXEC.
IF SQLCODE = 0
ADD +1 TO WS-ROW-COUNT
IF WS-NULL-IND < 0
MOVE SPACE TO DCL-CLAIM-TYPE
END-IF
PERFORM 250-VALIDATE-CLAIM-PARA THRU 250-EXIT
ELSE
IF SQLCODE = 100
DISPLAY 'NO RECORD FOUND'
CONTINUE
ELSE
DISPLAY 'ERROR IN 200-FETCH-PARA'
DISPLAY 'SQL CODE FOR FETCH IS ' SQLCODE
CALL WS-ABENDPGM
END-IF
END-IF.

200-EXIT. EXIT.

250-VALIDATE-CLAIM-PARA.
MOVE DCL-POLCY-NUMBER TO POLICY-NUMBER
MOVE DCL-CLAIM-NUMBER TO CLAIM-NUMBER
MOVE DCL-CLAIM-AMOUNT TO CLAIM-AMOUNT
MOVE DCL-CLAIM-SUBMIT-DT TO CLAIM-SUBMIT-DT
MOVE '00' TO SUB-RTN-CODE
MOVE SPACE TO REJECT-ERR-MSG.

CALL 'POLCYPGM' USING CLAIM-DETAILS

IF SUB-RTN-CODE = '00'
MOVE 'INPROG' TO DCL-CLAIM-STATUS
EXEC SQL
UPDATE CLAIM_T6
SET CLAIM_STATUS = :DCL-CLAIM-STATUS
WHERE CURRENT OF C-NAME
END-EXEC
IF SQLCODE = 0
EXEC SQL COMMIT END-EXEC
ELSE
DISPLAY 'ERROR IN UPDATE 250-VALIDATE-CLAIM-PARA'
DISPLAY 'SQLCODE IS ' SQLCODE
DISPLAY 'RECORD IN PROCESS ' DCL-CLAIM-DETAILS
CALL WS-ABENDPGM
END-IF
ELSE
DISPLAY 'ERROR IN VALIDATION'
DISPLAY 'ERROR REASON ' REJECT-ERR-MSG
DISPLAY 'ERROR RECORD IS ' CLAIM-DETAILS
END-IF.

250-EXIT. EXIT.
ID DIVISION.
PROGRAM-ID. CLAIMPGM.
AUTHOR. UR NAME.
DATE-WRITTEN. TODAY.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.

DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC.
EXEC SQL INCLUDE DCLCLAI6 END-EXEC.

EXEC SQL DECLARE C-NAME CURSOR WITH HOLD FOR


SELECT
CLAIM_NUMBER,CUST_NAME,CLAIM_AMOUNT,CLAIM_STATUS,
CLAIM_TYPE,CLAIM_SUBMIT_DT,POLCY_NUMBER
FROM CLAIM_T6
WHERE CLAIM_SUBMIT_DT >= CURRENT DATE - 1 DAY
FOR UPDATE OF CLAIM_STATUS
END-EXEC.

01 WS-NULL-IND PIC S9(04) COMP.


01 WS-ROW-COUNT PIC 9(02) VALUE ZERO.
01 WS-ABENDPGM PIC X(08) VALUE 'ABENDPGM'.
01 CLAIM-DETAILS.
03 POLICY-NUMBER PIC X(05) VALUE SPACE.
03 CLAIM-NUMBER PIC X(05) VALUE SPACE.
03 CLAIM-AMOUNT PIC 9(03)V9(2) VALUE ZERO.
03 CLAIM-SUBMIT-DT PIC X(10) VALUE SPACE.
03 SUB-RTN-CODE PIC X(02) VALUE SPACE.
03 REJECT-ERR-MSG PIC X(30) VALUE SPACE.

PROCEDURE DIVISION.
000-MAIN-PARA.
DISPLAY 'CLAIMPGM STARTED'.

EXEC SQL OPEN C-NAME END-EXEC.


IF SQLCODE NOT = 00
DISPLAY 'ERROR IN MAIN PGM '
DISPLAY 'ERROR ON OPEN CURSOR SQLCODE ' SQLCODE
CALL WS-ABENDPGM
END-IF.

PERFORM 200-FETCH-PARA THRU 200-EXIT


UNTIL SQLCODE = 100.
EXEC SQL CLOSE C-NAME END-EXEC.

DISPLAY 'TOTAL ROW COUNT ' WS-ROW-COUNT.


STOP RUN.
200-FETCH-PARA.
EXEC SQL FETCH C-NAME INTO
:DCL-CLAIM-NUMBER,
:DCL-CUST-NAME,
:DCL-CLAIM-AMOUNT,
:DCL-CLAIM-STATUS,
:DCL-CLAIM-TYPE:WS-NULL-IND,
:DCL-CLAIM-SUBMIT-DT,
:DCL-POLCY-NUMBER
END-EXEC.
IF SQLCODE = 0
ADD +1 TO WS-ROW-COUNT
IF WS-NULL-IND < 0
MOVE SPACE TO DCL-CLAIM-TYPE
END-IF
PERFORM 250-VALIDATE-CLAIM-PARA THRU 250-EXIT
ELSE
IF SQLCODE = 100
DISPLAY 'NO RECORD FOUND'
CONTINUE
ELSE
DISPLAY 'ERROR IN 200-FETCH-PARA'
DISPLAY 'SQL CODE FOR FETCH IS ' SQLCODE
CALL WS-ABENDPGM
END-IF
END-IF.

200-EXIT. EXIT.

250-VALIDATE-CLAIM-PARA.
MOVE DCL-POLCY-NUMBER TO POLICY-NUMBER
MOVE DCL-CLAIM-NUMBER TO CLAIM-NUMBER
MOVE DCL-CLAIM-AMOUNT TO CLAIM-AMOUNT
MOVE DCL-CLAIM-SUBMIT-DT TO CLAIM-SUBMIT-DT
MOVE '00' TO SUB-RTN-CODE
MOVE SPACE TO REJECT-ERR-MSG.

CALL 'POLCYPGM' USING CLAIM-DETAILS


IF SUB-RTN-CODE = '00'
MOVE 'INPROG' TO DCL-CLAIM-STATUS
EXEC SQL
UPDATE CLAIM_T6
SET CLAIM_STATUS = :DCL-CLAIM-STATUS
WHERE CURRENT OF C-NAME
END-EXEC
IF SQLCODE = 0
EXEC SQL COMMIT END-EXEC
ELSE
DISPLAY 'ERROR IN UPDATE 250-VALIDATE-CLAIM-PARA'
DISPLAY 'SQLCODE IS ' SQLCODE
DISPLAY 'RECORD IN PROCESS ' DCL-CLAIM-DETAILS
CALL WS-ABENDPGM
END-IF
ELSE
DISPLAY 'ERROR IN VALIDATION'
DISPLAY 'ERROR REASON ' REJECT-ERR-MSG
DISPLAY 'ERROR RECORD IS ' CLAIM-DETAILS
END-IF.

250-EXIT. EXIT.
--DROP TABLE CLAIM_T6; 00000130
00000231
--SELECT * FROM IBMUSER.CLAIM_T6 00000322
--WHERE CLAIM_SUBMIT_DT >= CURRENT DATE - 5 DAYS; 00000422
00000519
-- CREATE TABLE IBMUSER.CLAIM_T6( 00010032
-- CLAIM_NUMBER CHAR(05) NOT NULL PRIMARY KEY, 00020032
-- CUST_NAME CHAR(10), 00030032
-- CLAIM_AMOUNT DECIMAL(5,2) CHECK(CLAIM_AMOUNT > 0), 00040032
-- CLAIM_STATUS CHAR(10), 00050032
-- CLAIM_TYPE CHAR(10), 00060032
-- POLCY_NUMBER CHAR(05), 00061032
-- CLAIM_SUBMIT_DT DATE WITH DEFAULT ) IN DSNDB04.FILEA; 00070032
00080000
-- CREATE UNIQUE INDEX CLAIIDX6 ON IBMUSER.CLAIM_T6(CLAIM_NUMBER); 00081032
00082002
INSERT INTO IBMUSER.CLAIM_T6( 00090038
CLAIM_NUMBER,CUST_NAME,CLAIM_AMOUNT,CLAIM_STATUS,CLAIM_TYPE, 00100038
CLAIM_SUBMIT_DT,POLCY_NUMBER) 00111038
VALUES('C4444','ARUN KUMAR',200.45,'PENDING','MEDICAL', 00120040
'2022-05-14','P1111'); 00130039
00130132
SELECT * FROM CLAIM_T6; 00131032
-- SELECT * FROM IBMUSER.CLAIM_T61; 00001011
00002010
-- CREATE TABLE IBMUSER.CLAIM_T61( 00010001
-- CLAIM_NUMBER CHAR(05) NOT NULL PRIMARY KEY, 00020001
-- CUST_NAME VARCHAR(10) NOT NULL, 00030001
-- CLAIM_AMOUNT DECIMAL(5,2) CHECK(CLAIM_AMOUNT > 0), 00040001
-- CLAIM_TYPE CHAR(10) WITH DEFAULT 'MEDICAL', 00050001
-- CLAIM_STATUS CHAR(10), 00060001
-- CLAIM_SUB_DT DATE WITH DEFAULT, 00070001
-- CREATE_TS TIMESTAMP WITH DEFAULT, 00080001
-- UPDATE_TS TIMESTAMP WITH DEFAULT, 00090001
-- LAST_UPDT_TOKEN CHAR(10) ) 00100001
-- IN DSNDB04.FILEA; 00110001
--- TESTDB.TESTTS9; 00120000
00130001
-- CREATE UNIQUE INDEX INXT61 ON IBMUSER.CLAIM_T61(CLAIM_NUMBER); 00131004
00132002
-- INSERT INTO IBMUSER.CLAIM_T61( 00140010
-- CLAIM_NUMBER,CUST_NAME,CLAIM_AMOUNT,CLAIM_TYPE,CLAIM_STATUS, 00150010
-- CLAIM_SUB_DT,LAST_UPDT_TOKEN) 00160010
-- VALUES('C4444','ANIL KUMAR',100.00,'MEDICAL','SUBMIT', 00170010
--'2021-10-01','IBMUSER'); 00180010
00190001
//IBMUSERX JOB (285),CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID,REGION=6M
//STEPDB2 EXEC PGM=IKJEFT01,DYNAMNBR=64
//STEPLIB DD DSN=DSN810.SDSNLOAD,DISP=SHR
// DD DSN=IBMUSER.T61.LOAD,DISP=SHR == LOAD MODULE
//SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(500,50))
//SYSUT4 DD UNIT=SYSDA,SPACE=(CYL,(500,50))
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//CLAIMDD1 DD DSN=IBMUSER.T61.CLAIM.OT1,DISP=(NEW,CATLG,DELETE),
// SPACE=(TRK,(1,1),RLSE),UNIT=3390,VOL=SER=S7SYS1,
// DCB=(DSORG=PS,LRECL=50,RECFM=FB,BLKSIZE=0)
//SYSTSIN DD *
DSN S(DB8G)
RUN PROGRAM(CURSORU1) PLAN(S1304PL)
END
/*
//
ID DIVISION. 00010000
PROGRAM-ID. CURSORP1. 00020003
AUTHOR. NAME. 00030000
DATE-WRITTEN. TODAY. 00040000
00050000
ENVIRONMENT DIVISION. 00060001
INPUT-OUTPUT SECTION. 00070000
FILE-CONTROL. 00080000
00090000
DATA DIVISION. 00100000
FILE SECTION. 00110000
WORKING-STORAGE SECTION. 00120000
EXEC SQL INCLUDE SQLCA END-EXEC. 00130000
EXEC SQL INCLUDE DCLCLAIM END-EXEC. 00140000
EXEC SQL 00141003
DECLARE C-NAME CURSOR FOR 00142003
SELECT CLAIM_NUMBER, 00143003
CUST_NAME, 00144003
CLAIM_AMOUNT, 00145003
CLAIM_TYPE, 00146003
CLAIM_STATUS, 00147003
CLAIM_SUB_DT 00148003
FROM CLAIM_T61 00149003
END-EXEC. 00149103
01 WS-NULL-IND PIC S9(04) COMP. 00150005
01 WS-ROW-COUNT PIC 9(02) VALUE ZERO. 00160000
01 WS-ABENDPGM PIC X(08) VALUE 'ABENDPGM'. 00170000
01 WS-END-OF-ROWS PIC X(01) VALUE SPACE. 00180003
PROCEDURE DIVISION. 00190000
000-MAIN-PARA. 00200000
DISPLAY 'CBLPGM04 STARTED'. 00210000
MOVE 'N' TO WS-END-OF-ROWS. 00211003
EXEC SQL OPEN C-NAME END-EXEC. 00212003
IF SQLCODE NOT = 000 00213003
DISPLAY 'ERROR IN OPEN CURSOR ' 00214003
DISPLAY 'SQLCODE ' SQLCODE 00215003
CALL WS-ABENDPGM 00216003
END-IF. 00217003
00218003
PERFORM UNTIL WS-END-OF-ROWS = 'Y' 00219003
EXEC SQL 00230003
FETCH C-NAME INTO 00240003
:DCL-CLAIM-NUMBER, 00250000
:DCL-CUST-NAME, 00260000
:DCL-CLAIM-AMOUNT, 00262000
:DCL-CLAIM-TYPE, 00263000
:DCL-CLAIM-STATUS:WS-NULL-IND, 00264005
:DCL-CLAIM-SUB-DT 00270003
END-EXEC 00320004
EVALUATE TRUE 00330003
WHEN SQLCODE = 000 00340003
IF WS-NULL-IND < 0 00341005
MOVE SPACE TO DCL-CLAIM-STATUS 00342005
END-IF 00343005
DISPLAY 'CLAIM RECORD IS ' DCL-CLAIM-DETAILS 00350003
ADD +1 TO WS-ROW-COUNT 00351003
* PERFORM 100-MOVE-WRITE-PARA THRU 100-EXIT 00351106
WHEN SQLCODE = 100 00352003
DISPLAY 'END OF THE RESULT' 00353003
MOVE 'Y' TO WS-END-OF-ROWS 00354003
WHEN OTHER 00360003
DISPLAY 'ERROR IN SELECT QUERY ' 00370003
DISPLAY 'SQLCODE IS ' SQLCODE 00380003
CALL WS-ABENDPGM 00390003
END-EVALUATE 00400003
END-PERFORM. 00401003
EXEC SQL CLOSE C-NAME END-EXEC. 00402003
STOP RUN. 00410000
ID DIVISION. 00010000
PROGRAM-ID. CURSORP2. 00020007
AUTHOR. NAME. 00030000
DATE-WRITTEN. TODAY. 00040000
00050000
ENVIRONMENT DIVISION. 00060001
INPUT-OUTPUT SECTION. 00070000
FILE-CONTROL. 00080000
SELECT CLAIM-OTFILE ASSIGN TO CLAIMDD1 00081007
ORGANIZATION IS SEQUENTIAL 00082007
ACCESS MODE IS SEQUENTIAL 00083007
FILE STATUS IS WS-OT-STATUS. 00084007
00090000
DATA DIVISION. 00100000
FILE SECTION. 00110000
FD CLAIM-OTFILE 00111007
LABEL RECORD ARE STANDARD. 00112007
COPY CLAIMCPY. 00113007
WORKING-STORAGE SECTION. 00120000
EXEC SQL INCLUDE SQLCA END-EXEC. 00130000
EXEC SQL INCLUDE DCLCLAIM END-EXEC. 00140000
EXEC SQL 00141003
DECLARE C-NAME CURSOR FOR 00142003
SELECT CLAIM_NUMBER, 00143003
CUST_NAME, 00144003
CLAIM_AMOUNT, 00145003
CLAIM_TYPE, 00146003
CLAIM_STATUS, 00147003
CLAIM_SUB_DT 00148003
FROM CLAIM_T61 00149003
END-EXEC. 00149103
01 WS-NULL-IND PIC S9(04) COMP. 00150005
01 WS-OT-STATUS PIC X(02) VALUE SPACE. 00151007
01 WS-ROW-COUNT PIC 9(02) VALUE ZERO. 00160000
01 WS-ABENDPGM PIC X(08) VALUE 'ABENDPGM'. 00170000
01 WS-END-OF-ROWS PIC X(01) VALUE SPACE. 00180003
PROCEDURE DIVISION. 00190000
000-MAIN-PARA. 00200000
DISPLAY 'CBLPGM04 STARTED'. 00210000
00210107
PERFORM 100-INITIAL-PARA THRU 100-EXIT. 00210207
PERFORM 200-FETCH-PARA THRU 200-EXIT 00210307
UNTIL WS-END-OF-ROWS = 'Y'. 00210408
00210507
CLOSE CLAIM-OTFILE. 00210607
EXEC SQL CLOSE C-NAME END-EXEC. 00210707
DISPLAY 'TOTAL ROW COUNT ' WS-ROW-COUNT. 00210807
STOP RUN. 00210907
00211007
100-INITIAL-PARA. 00211107
00211207
MOVE 'N' TO WS-END-OF-ROWS. 00211303
EXEC SQL OPEN C-NAME END-EXEC. 00212003
IF SQLCODE NOT = 000 00213003
DISPLAY 'ERROR IN OPEN CURSOR ' 00214003
DISPLAY 'SQLCODE ' SQLCODE 00215003
CALL WS-ABENDPGM 00216003
END-IF. 00217003
00217107
OPEN OUTPUT CLAIM-OTFILE 00217207
IF WS-OT-STATUS NOT = '00' 00217307
DISPLAY 'ERROR IN FILE OPEN' 00217407
DISPLAY 'STATUS IS ' WS-OT-STATUS 00217507
CALL WS-ABENDPGM 00217607
END-IF. 00217707
00217807
100-EXIT. EXIT. 00217907
00218007
200-FETCH-PARA. 00218107
EXEC SQL 00230003
FETCH C-NAME INTO 00240003
:DCL-CLAIM-NUMBER, 00250000
:DCL-CUST-NAME, 00260000
:DCL-CLAIM-AMOUNT, 00262000
:DCL-CLAIM-TYPE, 00263000
:DCL-CLAIM-STATUS:WS-NULL-IND, 00264005
:DCL-CLAIM-SUB-DT 00270003
END-EXEC 00320004
EVALUATE TRUE 00330003
WHEN SQLCODE = 000 00340003
IF WS-NULL-IND < 0 00341005
MOVE SPACE TO DCL-CLAIM-STATUS 00342005
END-IF 00343005
ADD +1 TO WS-ROW-COUNT 00351003
PERFORM 250-MOVE-WRITE-PARA THRU 250-EXIT 00351107
WHEN SQLCODE = 100 00352003
DISPLAY 'END OF THE RESULT' 00353003
MOVE 'Y' TO WS-END-OF-ROWS 00354003
WHEN OTHER 00360003
DISPLAY 'ERROR IN SELECT QUERY ' 00370003
DISPLAY 'SQLCODE IS ' SQLCODE 00380003
CALL WS-ABENDPGM 00390003
END-EVALUATE. 00400007
200-EXIT. EXIT. 00402007
00403007
250-MOVE-WRITE-PARA. 00404007
MOVE DCL-CLAIM-NUMBER TO CLAIM-NUMBER 00405007
MOVE DCL-CUST-NAME-TEXT TO CUST-NAME-TEXT 00406007
MOVE DCL-CLAIM-AMOUNT TO CLAIM-AMOUNT 00407007
MOVE DCL-CLAIM-TYPE TO CLAIM-TYPE 00408007
MOVE DCL-CLAIM-STATUS TO CLAIM-STATUS 00409007
MOVE DCL-CLAIM-SUB-DT TO CLAIM-SUB-DT 00410007
00420007
WRITE CLAIM-DETAILS. 00430007
IF WS-OT-STATUS NOT = '00' 00440007
DISPLAY 'ERROR IN WRITE 250-PARA' 00450007
DISPLAY 'STATUS CODE IS ' WS-OT-STATUS 00460007
CALL WS-ABENDPGM 00470007
END-IF. 00480007
00490007
250-EXIT. EXIT. 00500007
ID DIVISION. 00010000
PROGRAM-ID. CURSORP3. 00020010
AUTHOR. NAME. 00030000
DATE-WRITTEN. TODAY. 00040000
00050000
ENVIRONMENT DIVISION. 00060000
INPUT-OUTPUT SECTION. 00070000
FILE-CONTROL. 00080000
SELECT CLAIM-OUTFILE ASSIGN TO CLAIMDD1 00081004
ORGANIZATION IS SEQUENTIAL 00082004
ACCESS MODE IS SEQUENTIAL 00083004
FILE STATUS IS WS-OT-STATUS. 00084004
00090000
DATA DIVISION. 00100000
FILE SECTION. 00110000
FD CLAIM-OUTFILE 00111004
LABEL RECORDS ARE STANDARD. 00112004
COPY CLAIMCPY. 00113017
00119017
WORKING-STORAGE SECTION. 00120000
EXEC SQL INCLUDE SQLCA END-EXEC. 00130000
EXEC SQL INCLUDE DCLCLAIM END-EXEC. 00140000
00150000
EXEC SQL 00160000
DECLARE C-NAME SCROLL CURSOR FOR 00170012
SELECT 00180000
CLAIM_NUMBER, 00181000
CUST_NAME, 00182000
CLAIM_AMOUNT, 00183000
CLAIM_TYPE, 00184000
CLAIM_STATUS, 00185000
CLAIM_SUB_DT 00186000
FROM CLAIM_T61 00190017
FOR FETCH ONLY 00200000
END-EXEC. 00210000
01 WS-ROW-COUNT PIC 9(02) VALUE ZERO. 00220000
01 WS-OT-STATUS PIC X(02) VALUE SPACE. 00221004
01 WS-ABENDPGM PIC X(08) VALUE 'ABENDPGM'. 00230000
01 WS-NULL-IND PIC S9(04) COMP. 00240003
PROCEDURE DIVISION. 00250000
000-MAIN-PARA. 00260000
DISPLAY 'CURSORP1 STARTED'. 00270000
00280000
PERFORM 100-INITIAL-PARA THRU 100-EXIT 00281004
PERFORM 200-FETCH-PARA THRU 200-EXIT; 00282016
00360000
CLOSE CLAIM-OUTFILE. 00380004
EXEC SQL CLOSE C-NAME END-EXEC. 00390000
00400000
DISPLAY 'TOTAL ROW COUNT ' WS-ROW-COUNT. 00410000
STOP RUN. 00420000
00420104
100-INITIAL-PARA. 00420204
MOVE ZERO TO WS-ROW-COUNT. 00420304
00420404
OPEN OUTPUT CLAIM-OUTFILE 00420504
IF WS-OT-STATUS NOT = '00' 00420604
DISPLAY 'ERROR IN 100-PARA ' 00420704
DISPLAY 'STAUTS CODE IS ' WS-OT-STATUS 00420804
CALL WS-ABENDPGM 00420904
END-IF. 00421004
00421104
EXEC SQL OPEN C-NAME END-EXEC. 00421204
IF SQLCODE = 000 00422004
CONTINUE 00423004
ELSE 00424004
DISPLAY 'ERROR IN OPEN CURSOR ' SQLCODE 00425004
CALL WS-ABENDPGM 00426004
END-IF. 00427004
00428004
100-EXIT. EXIT. 00430018
200-FETCH-PARA. 00440000
EXEC SQL FETCH ABSOLUTE -3 C-NAME INTO 00450019
:DCL-CLAIM-NUMBER, 00460001
:DCL-CUST-NAME, 00470001
:DCL-CLAIM-AMOUNT, 00480001
:DCL-CLAIM-TYPE, 00490001
:DCL-CLAIM-STATUS:WS-NULL-IND, 00500003
:DCL-CLAIM-SUB-DT 00510000
END-EXEC. 00520000
IF SQLCODE = 000 00530000
IF WS-NULL-IND < 0 00531003
MOVE SPACE TO DCL-CLAIM-STATUS 00532003
END-IF 00533003
00534003
ADD +1 TO WS-ROW-COUNT 00540000
PERFORM 250-MOVE-WRITE-PARA THRU 250-EXIT 00550006
ELSE 00560000
IF SQLCODE = 100 00570000
CONTINUE 00580000
ELSE 00590000
DISPLAY 'ERROR IN FETCH ' SQLCODE 00600000
DISPLAY 'ROW COUNT ' WS-ROW-COUNT 00610000
CALL WS-ABENDPGM 00611002
END-IF 00620000
END-IF. 00630000
200-EXIT. EXIT. 00640000
00650004
250-MOVE-WRITE-PARA. 00660004
MOVE DCL-CLAIM-NUMBER TO CLAIM-NUMBER 00670004
MOVE DCL-CUST-NAME-TEXT TO CUST-NAME 00680017
MOVE DCL-CLAIM-AMOUNT TO CLAIM-AMOUNT 00690004
MOVE DCL-CLAIM-TYPE TO CLAIM-TYPE 00700017
MOVE DCL-CLAIM-STATUS TO CLAIM-STATUS 00710004
MOVE DCL-CLAIM-SUB-DT TO CLAIM-SUB-DT. 00720004
00730004
WRITE CLAIM-DETAILS. 00740018
IF WS-OT-STATUS NOT = '00' 00750004
DISPLAY 'ERROR IN 250-ERROR' 00760004
DISPLAY 'STATUS IS ' WS-OT-STATUS 00770004
DISPLAY 'THE RECORD IS ' DCL-CLAIM-DETAILS 00780004
DISPLAY 'ROW COUNT ' WS-ROW-COUNT 00790004
CALL WS-ABENDPGM 00800004
END-IF. 00810004
00820004
250-EXIT. EXIT. 00830004
ID DIVISION. 00010000
PROGRAM-ID. CURSORP4. 00020018
AUTHOR. NAME. 00030000
DATE-WRITTEN. TODAY. 00040000
00050000
ENVIRONMENT DIVISION. 00060000
INPUT-OUTPUT SECTION. 00070000
FILE-CONTROL. 00080000
SELECT CLAIM-OUTFILE ASSIGN TO CLAIMDD1 00081004
ORGANIZATION IS SEQUENTIAL 00082004
ACCESS MODE IS SEQUENTIAL 00083004
FILE STATUS IS WS-OT-STATUS. 00084004
00090000
DATA DIVISION. 00100000
FILE SECTION. 00110000
FD CLAIM-OUTFILE 00111004
LABEL RECORDS ARE STANDARD. 00112004
COPY CLAIMCPY. 00113023
00114023
WORKING-STORAGE SECTION. 00120000
EXEC SQL INCLUDE SQLCA END-EXEC. 00130000
00140018
EXEC SQL DECLARE IBMUSER.CLAIM_TF TABLE 00141018
( CLAIM_NUMBER CHAR(10) NOT NULL, 00142018
CUST_NAME CHAR(10), 00143018
CLAIM_AMOUNT DECIMAL(5, 2), 00144018
CLAIM_TYPE CHAR(10) NOT NULL, 00145018
CLAIM_STATUS CHAR(10), 00146018
CLAIM_SUB_DT DATE 00147018
) END-EXEC. 00148018
01 DCL-CLAIM-DETAILS. 00149018
10 DCL-CLAIM-NUMBER PIC X(10) OCCURS 3 TIMES. 00149118
10 DCL-CUST-NAME PIC X(10) OCCURS 3 TIMES. 00149218
10 DCL-CLAIM-AMOUNT PIC S9(3)V9(2) COMP-3 OCCURS 3 TIMES.00149318
10 DCL-CLAIM-TYPE PIC X(10) OCCURS 3 TIMES. 00149418
10 DCL-CLAIM-STATUS PIC X(10) OCCURS 3 TIMES. 00149518
10 DCL-CLAIM-SUB-DT PIC X(10) OCCURS 3 TIMES. 00149618
00150000
EXEC SQL 00160000
DECLARE C-NAME CURSOR WITH ROWSET POSITIONING FOR 00170017
SELECT 00180000
CLAIM_NUMBER, 00181000
CUST_NAME, 00182000
CLAIM_AMOUNT, 00183000
CLAIM_TYPE, 00184000
CLAIM_STATUS, 00185000
CLAIM_SUB_DT 00186000
FROM CLAIM_T61 00190023
FOR FETCH ONLY 00200000
END-EXEC. 00210000
01 WS-ROW-COUNT PIC 9(02) VALUE ZERO. 00220000
01 I PIC 9(02) VALUE ZERO. 00220122
01 WS-OT-STATUS PIC X(02) VALUE SPACE. 00221004
01 WS-ABENDPGM PIC X(08) VALUE 'ABENDPGM'. 00230000
01 WS-NULL-IND PIC S9(04) COMP. 00240003
PROCEDURE DIVISION. 00250000
000-MAIN-PARA. 00260000
DISPLAY 'CURSORP1 STARTED'. 00270000
00280000
PERFORM 100-INITIAL-PARA THRU 100-EXIT 00281004
PERFORM 200-FETCH-PARA THRU 200-EXIT; 00282016
00360000
CLOSE CLAIM-OUTFILE. 00380004
EXEC SQL CLOSE C-NAME END-EXEC. 00390000
00400000
DISPLAY 'TOTAL ROW COUNT ' WS-ROW-COUNT. 00410000
STOP RUN. 00420000
00420104
100-INITIAL-PARA. 00420204
MOVE ZERO TO WS-ROW-COUNT. 00420304
00420404
OPEN OUTPUT CLAIM-OUTFILE 00420504
IF WS-OT-STATUS NOT = '00' 00420604
DISPLAY 'ERROR IN 100-PARA ' 00420704
DISPLAY 'STAUTS CODE IS ' WS-OT-STATUS 00420804
CALL WS-ABENDPGM 00420904
END-IF. 00421004
00421104
EXEC SQL OPEN C-NAME END-EXEC. 00421204
IF SQLCODE = 000 00422004
CONTINUE 00423004
ELSE 00424004
DISPLAY 'ERROR IN OPEN CURSOR ' SQLCODE 00425004
CALL WS-ABENDPGM 00426004
END-IF. 00427004
00428004
100-EXIT. 00430004
200-FETCH-PARA. 00440000
EXEC SQL FETCH NEXT ROWSET FROM C-NAME FOR 2 ROWS INTO 00450019
:DCL-CLAIM-NUMBER, 00460001
:DCL-CUST-NAME, 00470001
:DCL-CLAIM-AMOUNT, 00480001
:DCL-CLAIM-TYPE, 00490001
:DCL-CLAIM-STATUS, 00500020
:DCL-CLAIM-SUB-DT 00510000
END-EXEC. 00520000
IF SQLCODE = 000 00530000
ADD +1 TO WS-ROW-COUNT I 00540021
PERFORM 250-MOVE-WRITE-PARA THRU 250-EXIT 2 TIMES 00550021
ELSE 00560000
IF SQLCODE = 100 00570000
CONTINUE 00580000
ELSE 00590000
DISPLAY 'ERROR IN FETCH ' SQLCODE 00600000
DISPLAY 'ROW COUNT ' WS-ROW-COUNT 00610000
CALL WS-ABENDPGM 00611002
END-IF 00620000
END-IF. 00630000
200-EXIT. EXIT. 00640000
00650004
250-MOVE-WRITE-PARA. 00660004
MOVE DCL-CLAIM-NUMBER (I) TO CLAIM-NUMBER 00670021
MOVE DCL-CUST-NAME-TEXT(I) TO CUST-NAME, 00680023
MOVE DCL-CLAIM-AMOUNT (I) TO CLAIM-AMOUNT 00690021
MOVE DCL-CLAIM-TYPE (I) TO CLAIM-TYPE, 00700021
MOVE DCL-CLAIM-STATUS (I) TO CLAIM-STATUS 00710021
MOVE DCL-CLAIM-SUB-DT (I) TO CLAIM-SUB-DT. 00720021
00730004
WRITE CLAIM-DETAILS. 00740023
IF WS-OT-STATUS NOT = '00' 00750004
DISPLAY 'ERROR IN 250-ERROR' 00760004
DISPLAY 'STATUS IS ' WS-OT-STATUS 00770004
DISPLAY 'THE RECORD IS ' DCL-CLAIM-DETAILS 00780004
DISPLAY 'ROW COUNT ' WS-ROW-COUNT 00790004
CALL WS-ABENDPGM 00800004
END-IF. 00810004
ADD +1 TO I. 00820021
250-EXIT. EXIT. 00830004
ID DIVISION. 00010000
PROGRAM-ID. CURSORU1. 00020009
AUTHOR. NAME. 00030000
DATE-WRITTEN. TODAY. 00040000
00050000
ENVIRONMENT DIVISION. 00060001
INPUT-OUTPUT SECTION. 00070000
FILE-CONTROL. 00080000
SELECT CLAIM-OTFILE ASSIGN TO CLAIMDD1 00081007
ORGANIZATION IS SEQUENTIAL 00082007
ACCESS MODE IS SEQUENTIAL 00083007
FILE STATUS IS WS-OT-STATUS. 00084007
00090000
DATA DIVISION. 00100000
FILE SECTION. 00110000
FD CLAIM-OTFILE 00111007
LABEL RECORD ARE STANDARD. 00112007
COPY CLAIMCPY. 00113007
WORKING-STORAGE SECTION. 00120000
EXEC SQL INCLUDE SQLCA END-EXEC. 00130000
EXEC SQL INCLUDE DCLCLAIM END-EXEC. 00140000
EXEC SQL 00141003
DECLARE C-NAME CURSOR WITH HOLD FOR 00142012
SELECT CLAIM_NUMBER, 00143003
CUST_NAME, 00144003
CLAIM_AMOUNT, 00145003
CLAIM_TYPE, 00146003
CLAIM_STATUS, 00147003
CLAIM_SUB_DT 00148003
FROM CLAIM_T61 00149003
FOR UPDATE OF CLAIM_AMOUNT 00149109
END-EXEC. 00149203
01 WS-NULL-IND PIC S9(04) COMP. 00150005
01 WS-OT-STATUS PIC X(02) VALUE SPACE. 00151007
01 WS-ROW-COUNT PIC 9(02) VALUE ZERO. 00160000
01 WS-ABENDPGM PIC X(08) VALUE 'ABENDPGM'. 00170000
01 WS-END-OF-ROWS PIC X(01) VALUE SPACE. 00180003
01 WS-UPDATE-CNT PIC 9(02) VALUE ZERO. 00181011
PROCEDURE DIVISION. 00190000
000-MAIN-PARA. 00200000
DISPLAY 'CBLPGM04 STARTED'. 00210000
00210107
PERFORM 100-INITIAL-PARA THRU 100-EXIT. 00210207
PERFORM 200-FETCH-PARA THRU 200-EXIT 00210307
UNTIL WS-END-OF-ROWS = 'Y'. 00210408
00210507
CLOSE CLAIM-OTFILE. 00210607
EXEC SQL CLOSE C-NAME END-EXEC. 00210707
DISPLAY 'TOTAL ROW COUNT ' WS-ROW-COUNT. 00210807
STOP RUN. 00210907
00211007
100-INITIAL-PARA. 00211107
00211207
MOVE 'N' TO WS-END-OF-ROWS. 00211303
EXEC SQL OPEN C-NAME END-EXEC. 00212003
IF SQLCODE NOT = 000 00213003
DISPLAY 'ERROR IN OPEN CURSOR ' 00214003
DISPLAY 'SQLCODE ' SQLCODE 00215003
CALL WS-ABENDPGM 00216003
END-IF. 00217003
00217107
OPEN OUTPUT CLAIM-OTFILE 00217207
IF WS-OT-STATUS NOT = '00' 00217307
DISPLAY 'ERROR IN FILE OPEN' 00217407
DISPLAY 'STATUS IS ' WS-OT-STATUS 00217507
CALL WS-ABENDPGM 00217607
END-IF. 00217707
00217807
100-EXIT. EXIT. 00217907
00218007
200-FETCH-PARA. 00218107
EXEC SQL 00230003
FETCH C-NAME INTO 00240003
:DCL-CLAIM-NUMBER, 00250000
:DCL-CUST-NAME, 00260000
:DCL-CLAIM-AMOUNT, 00262000
:DCL-CLAIM-TYPE, 00263000
:DCL-CLAIM-STATUS:WS-NULL-IND, 00264005
:DCL-CLAIM-SUB-DT 00270003
END-EXEC 00320004
EVALUATE TRUE 00330003
WHEN SQLCODE = 000 00340003
IF WS-NULL-IND < 0 00341005
MOVE SPACE TO DCL-CLAIM-STATUS 00342005
END-IF 00343005
ADD +1 TO WS-ROW-COUNT 00351003
PERFORM 240-UPDATE-PARA THRU 240-EXIT 00351109
PERFORM 250-MOVE-WRITE-PARA THRU 250-EXIT 00351207
WHEN SQLCODE = 100 00352003
DISPLAY 'END OF THE RESULT' 00353003
MOVE 'Y' TO WS-END-OF-ROWS 00354003
WHEN OTHER 00360003
DISPLAY 'ERROR IN SELECT QUERY ' 00370003
DISPLAY 'SQLCODE IS ' SQLCODE 00380003
CALL WS-ABENDPGM 00390003
END-EVALUATE. 00400007
200-EXIT. EXIT. 00402007
00403007
240-UPDATE-PARA. 00403109
COMPUTE DCL-CLAIM-AMOUNT = DCL-CLAIM-AMOUNT + 100. 00403210
EXEC SQL 00403309
UPDATE CLAIM_T61 00403409
SET CLAIM_AMOUNT = :DCL-CLAIM-AMOUNT 00403509
WHERE CURRENT OF C-NAME 00403609
END-EXEC. 00403709
IF SQLCODE = 000 00403809
ADD +1 TO WS-UPDATE-CNT 00403911
IF WS-UPDATE-CNT = 3 00404011
EXEC SQL COMMIT END-EXEC 00404111
MOVE ZERO TO WS-UPDATE-CNT 00404211
END-IF 00404311
ELSE 00404409
DISPLAY 'ERROR IN 240-UPDATE' 00404509
DISPLAY 'SQLCODE ' SQLCODE 00404609
DISPLAY 'RECORD IS ' DCL-CLAIM-NUMBER 00404709
CALL WS-ABENDPGM 00404809
END-IF. 00404909
240-EXIT. EXIT. 00405009
250-MOVE-WRITE-PARA. 00405107
MOVE DCL-CLAIM-NUMBER TO CLAIM-NUMBER 00405207
MOVE DCL-CUST-NAME-TEXT TO CUST-NAME-TEXT 00406007
MOVE DCL-CLAIM-AMOUNT TO CLAIM-AMOUNT 00407007
MOVE DCL-CLAIM-TYPE TO CLAIM-TYPE 00408007
MOVE DCL-CLAIM-STATUS TO CLAIM-STATUS 00409007
MOVE DCL-CLAIM-SUB-DT TO CLAIM-SUB-DT 00410007
00420007
WRITE CLAIM-DETAILS. 00430007
IF WS-OT-STATUS NOT = '00' 00440007
DISPLAY 'ERROR IN WRITE 250-PARA' 00450007
DISPLAY 'STATUS CODE IS ' WS-OT-STATUS 00460007
CALL WS-ABENDPGM 00470007
END-IF. 00480007
00490007
250-EXIT. EXIT. 00500007
//IBMUSERX JOB (285),CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID,
// RESTART=STEPDB2
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE IBMUSER.T21.RESTART
SET MAXCC=00
/*
//STEPDB2 EXEC PGM=IKJEFT01,DYNAMNBR=64
//STEPLIB DD DSN=DSN810.SDSNLOAD,DISP=SHR
// DD DSN=IBMUSER.T21.LOAD,DISP=SHR == LOAD MODULE
//SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(500,50))
//SYSUT4 DD UNIT=SYSDA,SPACE=(CYL,(500,50))
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//CURSORD1 DD DSN=IBMUSER.T21.RESTART,DISP=(MOD,CATLG,CATLG),
// SPACE=(TRK,(1,1),RLSE),
// UNIT=SYSDA,VOL=SER=S7SYS1,
// DSORG=PS,LRECL=05,RECFM=FB,BLKSIZE=0
//SYSTSIN DD *
DSN S(DB8G)
RUN PROGRAM(CURSORP2) PLAN(S1304PL)
END
/*
//SYSIN DD *
Y
N
/*
//
ID DIVISION.
PROGRAM-ID. CURSORP2.
AUTHOR. NAME.
DATE-WRITTEN. TODAY.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT RESTART-FILE ASSIGN TO CURSORD1
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS WS-OT-STATUS.

DATA DIVISION.
FILE SECTION.
FD RESTART-FILE
LABEL RECORDS ARE STANDARD.
01 LAST-COMMIT-KEY PIC X(05).

WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC.
EXEC SQL INCLUDE DCLCLAIM END-EXEC.

EXEC SQL
DECLARE C-NAME CURSOR WITH HOLD FOR
SELECT CLAIM_NUMBER,CUST_NAME,CLAIM_AMOUNT,CLAIM_TYPE,
CLAIM_STATUS,CLAIM_SUB_DT
FROM CLAIM_T21
FOR UPDATE OF CLAIM_AMOUNT
END-EXEC.
01 WS-END-OF-ROWS PIC X(01) VALUE SPACE.
01 WS-NULL-IND PIC S9(04) COMP VALUE +0.
01 WS-OT-STATUS PIC X(02) VALUE SPACE.
01 WS-ROW-COUNT PIC 9(02) VALUE ZERO.
01 WS-UPDATE-COUNT PIC 9(02) VALUE ZERO.
01 WS-ABENDPGM PIC X(08) VALUE 'ABENDPGM'.
01 WS-RESTART PIC X(01) VALUE SPACE.
01 WS-END-OF-FILE PIC X(01) VALUE SPACE.
01 WS-ABEND PIC X(01) VALUE SPACE.
01 WS-CONTINUE-UPDATE PIC X(01) VALUE SPACE.
01 CLAIM-NUMBER-HOLD PIC X(05) VALUE SPACE.
PROCEDURE DIVISION.
000-MAIN-PARA.
DISPLAY 'CURSORP2 STARTED'.
ACCEPT WS-RESTART.
ACCEPT WS-ABEND.
IF WS-RESTART = 'N'
MOVE 'Y' TO WS-CONTINUE-UPDATE
ELSE
MOVE 'N' TO WS-CONTINUE-UPDATE
PERFORM 400-RESTART-PROCESS-PARA THRU 400-EXIT
END-IF.
PERFORM 010-NORMAL-PROCESS-PARA THRU 010-EXIT
CLOSE RESTART-FILE.
DISPLAY 'TOTAL RECORD CNT ' WS-ROW-COUNT.
STOP RUN.

400-RESTART-PROCESS-PARA.
MOVE 'N' TO WS-END-OF-FILE
OPEN I-O RESTART-FILE.
PERFORM UNTIL WS-END-OF-FILE = 'Y'
READ RESTART-FILE
AT END
MOVE 'Y' TO WS-END-OF-FILE
NOT AT END
MOVE LAST-COMMIT-KEY TO CLAIM-NUMBER-HOLD
END-READ
END-PERFORM.
CLOSE RESTART-FILE.

400-EXIT. EXIT.

010-NORMAL-PROCESS-PARA.
PERFORM 100-N-INITIAL-PARA THRU 100-EXIT.
PERFORM 200-OPEN-CURSOR-PARA THRU 200-EXIT.
MOVE 'N' TO WS-END-OF-ROWS.
PERFORM 300-FETCH-PARA THRU 300-EXIT
UNTIL WS-END-OF-ROWS = 'Y'.
EXEC SQL CLOSE C-NAME END-EXEC.
010-EXIT. EXIT.

100-N-INITIAL-PARA.

OPEN OUTPUT RESTART-FILE


IF WS-OT-STATUS NOT = '00'
DISPLAY 'ERROR IN FILE OPEN ' WS-OT-STATUS
CALL WS-ABENDPGM
END-IF.
DISPLAY 'END OF FILE OPEN ' WS-OT-STATUS.
100-EXIT.

200-OPEN-CURSOR-PARA.
EXEC SQL OPEN C-NAME END-EXEC.
IF SQLCODE NOT = 0000
DISPLAY 'ERROR IN MAIN-PARA'
DISPLAY 'SQLCODE IS ' SQLCODE
CALL WS-ABENDPGM
END-IF.
DISPLAY 'END OF OPEN CURSOR' SQLCODE.
200-EXIT. EXIT.

300-FETCH-PARA.
EXEC SQL
FETCH C-NAME INTO
:DCL-CLAIM-NUMBER,
:DCL-CUST-NAME,
:DCL-CLAIM-AMOUNT,
:DCL-CLAIM-TYPE:WS-NULL-IND,
:DCL-CLAIM-STATUS,
:DCL-CLAIM-SUB-DT
END-EXEC.
IF SQLCODE = 000
ADD +1 TO WS-ROW-COUNT
IF WS-RESTART = 'Y'
AND DCL-CLAIM-NUMBER = CLAIM-NUMBER-HOLD
MOVE 'Y' TO WS-CONTINUE-UPDATE
MOVE 'N' TO WS-RESTART
GO TO 300-EXIT
END-IF
IF WS-CONTINUE-UPDATE = 'Y'
IF WS-NULL-IND < 0
MOVE SPACE TO DCL-CLAIM-TYPE
END-IF
PERFORM 250-UPDATE-PARA THRU 250-EXIT
END-IF
ELSE
IF SQLCODE = 100
MOVE 'Y' TO WS-END-OF-ROWS
ELSE
DISPLAY 'ERROR IN FETCH-PARA'
DISPLAY 'SQLCODE IS ' SQLCODE
DISPLAY 'RECORD DETAILS ' DCL-CLAIM-DETAILS
DISPLAY 'ROW COUNT ' WS-ROW-COUNT
CALL WS-ABENDPGM
END-IF
END-IF.

300-EXIT. EXIT.

250-UPDATE-PARA.
COMPUTE DCL-CLAIM-AMOUNT = DCL-CLAIM-AMOUNT + 100.
EXEC SQL
UPDATE CLAIM_T21
SET CLAIM_AMOUNT = :DCL-CLAIM-AMOUNT
WHERE CURRENT OF C-NAME
END-EXEC.
IF SQLCODE = 00
ADD +1 TO WS-UPDATE-COUNT
IF WS-UPDATE-COUNT = 2
EXEC SQL COMMIT END-EXEC
PERFORM 350-SAVE-RECORD-PARA THRU 350-EXIT
MOVE 0 TO WS-UPDATE-COUNT
END-IF
ELSE
DISPLAY 'ERROR IN UPDATE ' SQLCODE
END-IF.
IF WS-ROW-COUNT = 5 AND WS-ABEND = 'Y'
DISPLAY 'ROW ' WS-ROW-COUNT
CALL WS-ABENDPGM
END-IF.
250-EXIT. EXIT.

350-SAVE-RECORD-PARA.
MOVE DCL-CLAIM-NUMBER TO LAST-COMMIT-KEY
WRITE LAST-COMMIT-KEY.
IF WS-OT-STATUS NOT = '00'
DISPLAY 'ERROR IN WRITE ' WS-OT-STATUS
CALL WS-ABENDPGM
END-IF.
350-EXIT. EXIT.

ID DIVISION.
PROGRAM-ID. POLCYPGM.
AUTHOR. UR NAME.
DATE-WRITTEN. TODAY.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.

DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC.
EXEC SQL INCLUDE DCLPOLCY END-EXEC.

LINKAGE SECTION.
01 CLAIM-DETAILS.
03 POLICY-NUMBER PIC X(05) VALUE SPACE.
03 CLAIM-NUMBER PIC X(05) VALUE SPACE.
03 CLAIM-AMOUNT PIC 9(03)V9(2) VALUE ZERO.
03 CLAIM-SUBMIT-DT PIC X(10) VALUE SPACE.
03 SUB-RTN-CODE PIC X(02) VALUE SPACE.
03 REJECT-ERR-MSG PIC X(30) VALUE SPACE.

PROCEDURE DIVISION USING CLAIM-DETAILS.


000-MAIN-PARA.
DISPLAY 'POLCY PGM STARTED'.
MOVE POLICY-NUMBER TO DCL-POLCY-NUMBER
DISPLAY 'POLICY IN SUBPGM ' DCL-POLCY-NUMBER

EXEC SQL
SELECT POLCY_NUMBER , INSURED_AMT ,
POLCY_EXPIRE_DT
INTO
:DCL-POLCY-NUMBER,
:DCL-INSURED-AMT,
:DCL-POLCY-EXPIRE-DT

FROM POLCY_T6
WHERE POLCY_NUMBER = :DCL-POLCY-NUMBER
END-EXEC.
IF SQLCODE = 0
PERFORM 100-VALID-CLAIM-PARA THRU 100-EXIT
ELSE
MOVE '99' TO SUB-RTN-CODE
MOVE 'POLCY NUM NOT FOUND ' TO REJECT-ERR-MSG
END-IF.

GOBACK.

100-VALID-CLAIM-PARA.
IF CLAIM-AMOUNT > DCL-INSURED-AMT
MOVE '01' TO SUB-RTN-CODE
MOVE 'CLAIM AMOUNT GT INSURED AMT ' TO REJECT-ERR-MSG
ELSE
IF CLAIM-SUBMIT-DT > DCL-POLCY-EXPIRE-DT
MOVE '02' TO SUB-RTN-CODE
MOVE 'CLAIM SUBMITTED AFT EXPIRE ' TO REJECT-ERR-MSG
ELSE
MOVE '00' TO SUB-RTN-CODE
END-IF
END-IF.

100-EXIT. EXIT.
--DROP TABLE POLCY_T5; 00001007
00002006
-- CREATE TABLE POLCY_T6( 00010008
-- POLCY_NUMBER CHAR(05) NOT NULL PRIMARY KEY, 00020008
-- CUST_NAME CHAR(10), 00030008
-- INSURED_AMT DECIMAL(5,2), 00040008
-- POLCY_EXPIRE_DT DATE NOT NULL 00050008
-- ) IN DSNDB04.FILEA; 00060008
00070000
--CREATE UNIQUE INDEX POLCYIDX ON IBMUSER.POLCY_T6(POLCY_NUMBER); 00080010
00081010
INSERT INTO POLCY_T6 ( 00090010
POLCY_NUMBER, CUST_NAME , INSURED_AMT , POLCY_EXPIRE_DT ) 00100010
VALUES ('P1111','ANIL KUMAR', 300.00,'2022-05-13'); 00110010
00120004
SELECT * FROM POLCY_T6; 00130010
00140010

You might also like