Db2 Programm
Db2 Programm
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.
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
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.
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
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.
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
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.
PROCEDURE DIVISION.
000-MAIN-PARA.
DISPLAY 'CLAIMPGM STARTED'.
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.
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.
PROCEDURE DIVISION.
000-MAIN-PARA.
DISPLAY 'CLAIMPGM STARTED'.
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.
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.
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.
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