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

Mainfram db2 SQL ROWSET

The document describes a program that updates a policy table in a database. It opens cursors to fetch records from the table and write updated records to an output file. It also uses a rowset cursor to retrieve insured amounts. The program performs initialization, fetches records from the cursor one by one, moves the data to output variables, writes to the output file, and closes the cursors at the end.

Uploaded by

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

Mainfram db2 SQL ROWSET

The document describes a program that updates a policy table in a database. It opens cursors to fetch records from the table and write updated records to an output file. It also uses a rowset cursor to retrieve insured amounts. The program performs initialization, fetches records from the cursor one by one, moves the data to output variables, writes to the output file, and closes the cursors at the end.

Uploaded by

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

ID DIVISION.

00010008
PROGRAM-ID. UPDATEP1. 00020007
AUTHOR. PRASADGL. 00030000
DATE-WRITTEN. TODAY. 00040000
00050000
ENVIRONMENT DIVISION. 00060000
INPUT-OUTPUT SECTION. 00070000
FILE-CONTROL. 00080000
SELECT OTFILE ASSIGN TO OTFILEDD 00090000
ORGANIZATION IS SEQUENTIAL 00100000
ACCESS MODE IS SEQUENTIAL 00110000
FILE STATUS IS FS-OTF. 00120000
00130000
DATA DIVISION. 00140000
FILE SECTION. 00150000
FD OTFILE. 00160000
COPY COPYPOLC. 00170001
00180000
WORKING-STORAGE SECTION. 00190000
01 FS-OTF PIC X(02) VALUE SPACE. 00200009
EXEC SQL INCLUDE SQLCA END-EXEC. 00210000
EXEC SQL INCLUDE DCLPOLCY END-EXEC. 00220000
EXEC SQL 00230000
DECLARE CURSOR-1 CURSOR FOR 00240000
SELECT POLICY_NUMBER, 00250004
CUST_NAME, 00260004
INSURED_AMOUNT, 00270004
POLICY_TYPE, 00280004
START_DATE, 00290004
EXP_DATE, 00300004
POLICY_STATUS 00310004
FROM POLICY_TABLE 00320006
FOR FETCH ONLY 00330004
END-EXEC. 00340003
EXEC SQL DECLARE CURSOR-2 CURSOR WITH ROWSET POSITIONING FOR 00341014
SELECT INSURED_AMOUNT 00341112
FROM POLICY_TABLE 00342012
END-EXEC. 00351012
00353012
00354012
01 IN-REC-CNT PIC 9(02) VALUE ZERO. 00360003
01 OT-REC-CNT PIC 9(02) VALUE ZERO. 00370003
01 UPDATE-REC-CNT PIC 9(02) VALUE ZERO. 00380003
01 WS-SQLCODE PIC X(09) VALUE SPACE. 00390003
01 WS-NULL-IND PIC S9(04) COMP. 00400003
01 WS-ABENDPGM PIC X(08) VALUE "PGMABEND". 00401009
01 WS-ARRAY PIC 9(02) VALUE ZERO. 00401112
01 WS-ROWSET. 00402012
05 ROWSET-ARRAY OCCURS 10 TIMES PIC 9(03)V9(02). 00403012
00410003
PROCEDURE DIVISION. 00420003
0000-MAIN-PARA. 00430003
DISPLAY "UPDATEP1 STARTED" 00440003
PERFORM 100-INITIAL-PARA THRU 100-EXIT. 00450003
PERFORM 200-FETCH-PARA THRU 200-EXIT UNTIL SQLCODE = 100. 00460003
PERFORM 300-ROWSET-PARA THRU 300-EXIT. 00461012
00470003
CLOSE OTFILE. 00480003
EXEC SQL CLOSE CURSOR-1 END-EXEC. 00490003
EXEC SQL CLOSE CURSOR-2 END-EXEC. 00491012
DISPLAY " INREC COUNT: " IN-REC-CNT. 00500003
DISPLAY " OUTREC COUNT: " OT-REC-CNT. 00510003
DISPLAY " UPDATE COUNT: " UPDATE-REC-CNT. 00520003
00530003
GOBACK. 00540003
00550003
100-INITIAL-PARA. 00560003
MOVE ZERO TO IN-REC-CNT 00570003
OT-REC-CNT 00580003
UPDATE-REC-CNT 00590003
OPEN OUTPUT OTFILE 00591003
EXEC SQL OPEN CURSOR-1 END-EXEC. 00591105
EVALUATE TRUE 00591312
WHEN FS-OTF NOT = "00" 00591403
WHEN SQLCODE NOT = 000 00591503
DISPLAY "ERROR IN 100-INITIAL-PARA" 00593003
DISPLAY "FILE STATUS IS: " FS-OTF 00594003
MOVE SQLCODE TO WS-SQLCODE 00594103
DISPLAY "CURSOR OPEN STATUS IS: " WS-SQLCODE 00594203
CALL WS-ABENDPGM 00595003
END-EVALUATE. 00596003
100-EXIT. EXIT. 00598003
00599003
200-FETCH-PARA. 00600003
INITIALIZE POLICY-DETAILS DCL-POLICY-DETAILS 00610003
EXEC SQL 00620003
FETCH CURSOR-1 INTO 00630003
:DCL-POLICY-NUMBER, 00640003
:DCL-CUST-NAME, 00640103
:DCL-INSURED-AMOUNT, 00640203
:DCL-POLICY-TYPE, 00640303
:DCL-START-DATE, 00640403
:DCL-EXP-DATE, 00640503
:DCL-POLICY-STATUS:WS-NULL-IND 00640610
END-EXEC. 00650003
EVALUATE TRUE 00660003
WHEN SQLCODE = 000 00670003
ADD +1 TO IN-REC-CNT 00680003
IF WS-NULL-IND < 0 00681010
MOVE SPACE TO DCL-POLICY-STATUS 00682010
END-IF 00683010
PERFORM 210-MOVE-PARA THRU 210-EXIT 00690012
WHEN SQLCODE = 100 00700003
CONTINUE 00710003
WHEN OTHER 00720003
DISPLAY "ERROR IN 200-FETCH-PARA" 00730003
MOVE SQLCODE TO WS-SQLCODE 00731003
DISPLAY "SQL STATUS CODE IS: " WS-SQLCODE 00740003
DISPLAY "ERROR RECORD IS: " DCL-POLICY-NUMBER 00750003
CALL WS-ABENDPGM 00760003
END-EVALUATE. 00770003
200-EXIT. EXIT. 00780003
210-MOVE-PARA. 00790012
MOVE DCL-POLICY-NUMBER TO POLICY-NUMBER 00800003
MOVE DCL-CUST-NAME TO CUST-NAME 00810003
MOVE DCL-INSURED-AMOUNT TO INSURED-AMOUNT 00820003
MOVE DCL-POLICY-TYPE TO POLICY-TYPE 00830003
MOVE DCL-START-DATE TO START-DATE 00840003
MOVE DCL-EXP-DATE TO EXP-DATE 00850003
MOVE DCL-POLICY-STATUS TO POLICY-STATUS 00860003
00861003
WRITE POLICY-DETAILS. 00870003
IF FS-OTF NOT = "00" THEN 00880003
DISPLAY "ERROR IN 210-MOVE-PARA" 00890012
DISPLAY "FILE STATUS IS: " FS-OTF 00900003
DISPLAY "ERROR RECORD IS: " DCL-POLICY-NUMBER 00910003
CALL WS-ABENDPGM 00920003
END-IF. 00930003
ADD +1 TO OT-REC-CNT. 00940003
210-EXIT. EXIT. 00950012
00960012
300-ROWSET-PARA. 00970012
EXEC SQL OPEN CURSOR-2 END-EXEC. 00971012
EVALUATE TRUE 00972012
WHEN SQLCODE NOT = 000 00974012
DISPLAY "ERROR IN 300-ROWSET-PARA" 00975012
MOVE SQLCODE TO WS-SQLCODE 00977012
DISPLAY "CURSOR OPEN STATUS IS: " WS-SQLCODE 00978012
CALL WS-ABENDPGM 00979012
END-EVALUATE. 00979112
EXEC SQL 00980012
FETCH FIRST ROWSET FROM CURSOR-2 FOR 10 ROWS 00990013
INTO :WS-ROWSET 01000012
END-EXEC. 01010012
IF SQLCODE = 000 01020012
PERFORM VARYING WS-ARRAY FROM 1 BY 1 UNTIL WS-ARRAY > 10 01030012
DISPLAY "INSURED VALUE: " ROWSET-ARRAY(I) 01040012
END-PERFORM 01050012
ELSE IF SQLCODE = 100 01060012
CONTINUE 01070012
ELSE 01080012
DISPLAY "ERROR IN 300-PARA" 01090012
DISPLAY "INSURED VALUE: " ROWSET-ARRAY(I) 01100012
CALL WS-ABEND-PGM 01110012
END-IF 01120012
END-IF. 01130012
DISPLAY "SQLERRD VALUE: " SQLERRD(3). 01131012
300-EXIT. EXIT. 01140012

You might also like