Db2prog3 2
Db2prog3 2
00010000
000200 PROGRAM-ID. DB2PROG3. 00020000
000300* 00030000
000400 ENVIRONMENT DIVISION. 00040000
000500 INPUT-OUTPUT SECTION. 00050000
000600 FILE-CONTROL. 00060000
000700 SELECT REPORT-FILE ASSIGN TO REPFILE 00070000
000800 ORGANIZATION IS SEQUENTIAL 00080000
000900 ACCESS MODE IS SEQUENTIAL 00090000
001000 FILE STATUS IS WS-REP-STAT. 00100000
001100* 00110000
001200 DATA DIVISION. 00120000
001300 FILE SECTION. 00130000
001400 FD REPORT-FILE 00140000
001500 RECORDING MODE IS F 00150000
001600 RECORD CONTAINS 80 CHARACTERS. 00160000
001700* 00170000
001800 01 REPORT-RECORD PIC X(80). 00180000
001900* 00190000
002000 WORKING-STORAGE SECTION. 00200000
002100 01 WS-REP-STAT PIC X(02) VALUE SPACES. 00210000
002200 88 REP-SUCCESS VALUE '00'. 00220000
002300* 00230000
002400 01 WS-ROW-FLAG PIC X(02) VALUE 'N'. 00240000
002500 88 END-OF-DATA VALUE 'Y'. 00250000
002600* 00260000
002700 01 WS-TOTAL. 00270000
002800 03 TOTAL-EARN PIC 9(06)V99 VALUE ZERO. 00280000
002900 03 TOTAL-DEDN PIC 9(06)V99 VALUE ZERO. 00290000
003000 03 TOTAL-EMP PIC 9(03) VALUE ZERO. 00300000
003100 03 OUT-EMP PIC ZZ9 VALUE ZERO. 00310000
003200 03 WS-SQLCODE PIC -9(03) VALUE ZERO. 00320000
003300* 00330000
003400 03 LINE-COUNT PIC 9(02) VALUE 99. 00340000
003500 03 PAGE-COUNT PIC 9(02) VALUE ZERO. 00350000
003600 03 WS-DATE PIC X(10) VALUE SPACES. 00360000
003700 03 WS-TIME PIC X(08) VALUE SPACES. 00370000
003800* 00380000
003900 01 LINE-RECORD. 00390000
004000 03 FILLER PIC X(78) VALUE ALL '-'. 00400000
004100* 00410000
004200 01 HEADING-LINE1. 00420000
004300 03 FILLER PIC X(06) VALUE 'DATE: '. 00430000
004400 03 OUT-DATE PIC X(10) VALUE SPACES. 00440000
004500 03 FILLER PIC X(50) VALUE SPACES. 00450000
004600 03 FILLER PIC X(06) VALUE 'TIME: '. 00460000
004700 03 OUT-TIME PIC X(08) VALUE SPACES. 00470000
004800* 00480000
004900 01 HEADING-LINE2. 00490000
005000 03 FILLER PIC X(20) VALUE 00500000
005100 'LISTING OF EMPLOYEES'. 00510000
005200 03 FILLER PIC X(46) VALUE SPACES. 00520000
005300 03 FILLER PIC X(06) VALUE 'PAGE: '. 00530000
005400 03 OUT-PAGE PIC Z9 VALUE ZERO. 00540000
005500* 00550000
005600 01 HEADING-LINE3. 00560000
005700 03 FILLER PIC X(50) VALUE 00570002
005800 'ID EMPLOYEE NAME LOC % OLD EARN OLD DEDN'. 00580002
005900 03 FILLER PIC X(22) VALUE 00590002
006000 ' NEW EARN NEW DEDN'. 00600002
006100* 00610000
006200 01 OUT-RECORD. 00620000
006300 03 OUT-ID PIC X(05) VALUE SPACES. 00630001
006400 03 FILLER PIC X(01) VALUE SPACES. 00640001
006500 03 OUT-NAME PIC X(15) VALUE SPACES. 00650001
006600 03 FILLER PIC X(01) VALUE SPACES. 00660001
006700 03 OUT-LOC PIC X(03) VALUE SPACES. 00670001
006800 03 FILLER PIC X(01) VALUE SPACES. 00680001
006900 03 OUT-PERCENT PIC 9(02) VALUE ZERO. 00690001
007000 03 FILLER PIC X(01) VALUE SPACES. 00700001
007100 03 OUT-OLD-EARN PIC ZZZ,ZZ9.99 VALUE ZERO. 00710001
007200 03 FILLER PIC X(01) VALUE SPACES. 00720001
007300 03 OUT-OLD-DEDN PIC ZZZ,ZZ9.99 VALUE ZERO. 00730001
007400 03 FILLER PIC X(01) VALUE SPACES. 00740001
007500 03 OUT-NEW-EARN PIC ZZZ,ZZ9.99 VALUE ZERO. 00750001
007600 03 FILLER PIC X(01) VALUE SPACES. 00760001
007700 03 OUT-NEW-DEDN PIC ZZZ,ZZ9.99 VALUE ZERO. 00770001
007800* 00780001
007900 01 WS-INDICATOR-VARIABLES. 00790001
008000 03 EMP-NAME-IND PIC S9(4) USAGE COMP. 00800001
008100 03 EMP-LOC-IND PIC S9(4) USAGE COMP. 00810001
008200 03 EMP-DOB-IND PIC S9(4) USAGE COMP. 00820001
008300 03 EMP-TECH-IND PIC S9(4) USAGE COMP. 00830001
008400 03 EMP-EARN-IND PIC S9(4) USAGE COMP. 00840001
008500 03 EMP-DEDN-IND PIC S9(4) USAGE COMP. 00850001
008600* 00860001
008700 01 WSS-ERR-MSG. 00870001
008800 05 WS-ERR-MSG. 00880001
008900 10 WS-ERR-MSG-LEN PIC S9(4) COMP VALUE 800. 00890001
009000 10 WS-ERR-MSG-TEXT PIC X(80) OCCURS 10 TIMES 00900001
009100 INDEXED BY WS-IDX. 00910001
009200 05 WS-ERR-LRECL PIC S9(9) COMP VALUE 80. 00920001
009300 05 WS-SUB PIC 9(2) VALUE ZERO. 00930001
009400* 00940001
009500 01 WS-OTHER-VARIABLES. 00950001
009600 03 WS-APPLY-PERCENT PIC 9(02) VALUE ZERO. 00960001
009700 03 WS-OLD-EMP-EARN PIC S9(05)V99 USAGE COMP-3. 00970001
009800 03 WS-OLD-EMP-DEDN PIC S9(05)V99 USAGE COMP-3. 00980001
009900 03 WS-NEW-EMP-EARN PIC S9(05)V99 USAGE COMP-3. 00990001
010000 03 WS-NEW-EMP-DEDN PIC S9(05)V99 USAGE COMP-3. 01000001
010100* 01010001
010200 01 WS-ACCEPT-VAR. 01020001
010300 03 WS-LOC PIC X(03). 01030001
010400 03 WS-PERC PIC 9(02). 01040001
010500* 01050001
010600 01 WS-CODE-PERCENT. 01060001
010700 03 WS-LOC-TABLE OCCURS 5 TIMES INDEXED BY LOC-IDX. 01070001
010800 05 WS-LOC-CODE PIC X(03). 01080001
010900 05 WS-PERCENT PIC 9(02). 01090001
011000* 01100001
011100 EXEC SQL 01110001
011200 INCLUDE EMPLOYEE 01120001
011300 END-EXEC 01130001
011400* 01140001
011500 EXEC SQL 01150001
011600 INCLUDE EMPTBLBK 01160001
011700 END-EXEC 01170001
011800* 01180001
011900 EXEC SQL 01190001
012000 DECLARE EMP_CURSOR CURSOR FOR 01200001
012100 SELECT EMP_ID 01210001
012200 ,EMP_NAME 01220001
012300 ,EMP_LOC 01230001
012400 ,EMP_EARN 01240001
012500 ,EMP_DEDN 01250001
012600 FROM EMPLOYEE_TABLE 01260001
012700 FOR UPDATE OF EMP_EARN, EMP_DEDN 01270001
012800 END-EXEC 01280001
012900* 01290001
013000 EXEC SQL 01300001
013100 INCLUDE SQLCA 01310001
013200 END-EXEC. 01320001
013300* 01330001
013400 PROCEDURE DIVISION. 01340001
013500 MAIN-PARA. 01350001
013600 PERFORM INIT-PARA 01360001
013700 PERFORM PROCESS-PARA UNTIL END-OF-DATA 01370001
013800 PERFORM END-PARA 01380001
013900 STOP RUN. 01390001
014000* 01400001
014100 INIT-PARA. 01410001
014200 OPEN OUTPUT REPORT-FILE 01420001
014300 DISPLAY 'OPEN REP FS = ', WS-REP-STAT 01430001
014400* 01440001
014500 IF REP-SUCCESS 01450001
014600 PERFORM ACCEPT-INPUT 01460001
014700 PERFORM RESET-PARA 01470001
014800 PERFORM OPEN-CURSOR 01480001
014900 PERFORM DATE-TIME-PARA 01490001
015000 ELSE 01500001
015100 DISPLAY 'ERROR OPENING FILE' 01510001
015200 SET END-OF-DATA TO TRUE 01520001
015300 END-IF. 01530001
015400* 01540001
015500 RESET-PARA. 01550001
015600 EXEC SQL 01560001
015700 DELETE FROM EMPLOYEE_TABLE 01570001
015800 END-EXEC 01580001
015900 MOVE SQLCODE TO WS-SQLCODE 01590001
016000 DISPLAY 'DELETE EMP SQL: ', WS-SQLCODE 01600001
016100* 01610001
016200 EXEC SQL 01620001
016300 INSERT INTO EMPLOYEE_TABLE 01630001
016400 SELECT * FROM EMPLOYEE_TABLE_BAK 01640001
016500 END-EXEC 01650001
016600 MOVE SQLCODE TO WS-SQLCODE 01660001
016700 DISPLAY 'INSERT EMP SQL: ', WS-SQLCODE. 01670001
016800* 01680001
016900 ACCEPT-INPUT. 01690001
017000 SET LOC-IDX TO 1 01700001
017100 PERFORM UNTIL LOC-IDX > 5 01710002
017200 ACCEPT WS-ACCEPT-VAR 01720001
017300 DISPLAY 'INPUT : ', WS-ACCEPT-VAR 01730002
017400 IF WS-PERC IS NOT NUMERIC 01740001
017500 MOVE ZERO TO WS-PERC 01750001
017600 END-IF 01760002
017700 MOVE WS-ACCEPT-VAR TO WS-LOC-TABLE(LOC-IDX) 01770002
017800 SET LOC-IDX UP BY 1 01780001
017900 END-PERFORM 01790002
018000 DISPLAY 'INPUT : ', WS-CODE-PERCENT. 01800002
018100* 01810001
018200 PROCESS-PARA. 01820001
018300 PERFORM FETCH-CURSOR 01830001
018400 EVALUATE SQLCODE 01840001
018500 WHEN ZERO 01850001
018600 ADD 1 TO TOTAL-EMP 01860001
018700 PERFORM UPDATE-PARA 01870001
018800 PERFORM PRINT-PARA 01880001
018900 WHEN 100 01890001
019000 SET END-OF-DATA TO TRUE 01900001
019100 WHEN OTHER 01910001
019200 PERFORM ERROR-PARA 01920001
019300 END-EVALUATE. 01930001
019400* 01940001
019500 OPEN-CURSOR. 01950001
019600 EXEC SQL 01960001
019700 OPEN EMP_CURSOR 01970001
019800 END-EXEC 01980001
019900 MOVE SQLCODE TO WS-SQLCODE 01990001
020000 DISPLAY 'OPEN SQL = ', WS-SQLCODE. 02000001
020100* 02010001
020200 CLOSE-CURSOR. 02020001
020300 EXEC SQL 02030001
020400 CLOSE EMP_CURSOR 02040001
020500 END-EXEC 02050001
020600 MOVE SQLCODE TO WS-SQLCODE 02060001
020700 DISPLAY 'CLOSE SQL = ', WS-SQLCODE. 02070001
020800* 02080001
020900 FETCH-CURSOR. 02090001
021000 EXEC SQL 02100001
021100 FETCH EMP_CURSOR 02110001
021200 INTO :HV-EMP-ID 02120001
021300 ,:HV-EMP-NAME :EMP-NAME-IND 02130001
021400 ,:HV-EMP-LOC :EMP-LOC-IND 02140001
021500 ,:HV-EMP-EARN :EMP-EARN-IND 02150001
021600 ,:HV-EMP-DEDN :EMP-DEDN-IND 02160001
021700 END-EXEC 02170001
021800 MOVE SQLCODE TO WS-SQLCODE 02180001
021900 DISPLAY 'FETCH SQL = ', WS-SQLCODE, ' ', HV-EMP-ID. 02190001
022000* 02200001
022100 UPDATE-PARA. 02210001
022200 MOVE HV-EMP-EARN TO WS-OLD-EMP-EARN, OUT-OLD-EARN 02220001
022300 MOVE HV-EMP-DEDN TO WS-OLD-EMP-DEDN, OUT-OLD-DEDN 02230001
022400* 02240001
022500 PERFORM GET-PERCENT 02250001
022600* 02260001
022700 COMPUTE WS-NEW-EMP-EARN = WS-OLD-EMP-EARN + 02270001
022800 (WS-OLD-EMP-EARN * (WS-APPLY-PERCENT / 100)) 02280001
022900* 02290001
023000 COMPUTE WS-NEW-EMP-DEDN = WS-NEW-EMP-EARN * 0.20 02300001
023100* 02310001
023200 MOVE WS-NEW-EMP-EARN TO HV-EMP-EARN, OUT-NEW-EARN 02320001
023300 MOVE WS-NEW-EMP-DEDN TO HV-EMP-DEDN, OUT-NEW-DEDN 02330001
023400* 02340001
023500 PERFORM UPDATE-ROW. 02350001
023600* 02360001
023700 UPDATE-ROW. 02370001
023800 EXEC SQL 02380001
023900 UPDATE EMPLOYEE_TABLE 02390001
024000 SET EMP_EARN = :HV-EMP-EARN 02400001
024100 ,EMP_DEDN = :HV-EMP-DEDN 02410001
024200 WHERE CURRENT OF EMP_CURSOR 02420001
024300 END-EXEC 02430001
024400* 02440001
024500 MOVE SQLCODE TO WS-SQLCODE 02450001
024600 DISPLAY 'UPDATE SQL: ', WS-SQLCODE, ' - ', HV-EMP-ID. 02460001
024700* 02470001
024800 GET-PERCENT. 02480001
024900 SET LOC-IDX TO 1 02490001
025000 SEARCH WS-LOC-TABLE 02500001
025100 AT END 02510001
025200 MOVE ZERO TO WS-APPLY-PERCENT 02520001
025300 WHEN HV-EMP-LOC = WS-LOC-CODE(LOC-IDX) 02530001
025400 MOVE WS-PERCENT(LOC-IDX) TO WS-APPLY-PERCENT 02540001
025500 END-SEARCH 02550002
025600 DISPLAY 'LOC: ', HV-EMP-LOC, ' %AGE: ', WS-APPLY-PERCENT. 02560002
025700* 02570001
025800 PRINT-PARA. 02580001
025900 IF LINE-COUNT > 5 02590001
026000 PERFORM HEADING-PARA 02600001
026100 END-IF 02610001
026200 MOVE HV-EMP-ID TO OUT-ID 02620001
026300 MOVE HV-EMP-NAME-TEXT(1:HV-EMP-NAME-LEN) 02630002
026400 TO OUT-NAME 02640002
026500 MOVE HV-EMP-LOC TO OUT-LOC 02650002
026600 MOVE WS-APPLY-PERCENT TO OUT-PERCENT 02660002
026700 WRITE REPORT-RECORD FROM OUT-RECORD 02670002
026800 MOVE SPACES TO OUT-RECORD 02680002
026900 ADD 1 TO LINE-COUNT. 02690002
027000* 02700002
027100 HEADING-PARA. 02710002
027200 ADD 1 TO PAGE-COUNT 02720002
027300 MOVE PAGE-COUNT TO OUT-PAGE 02730002
027400 WRITE REPORT-RECORD FROM HEADING-LINE1 AFTER PAGE 02740002
027500 WRITE REPORT-RECORD FROM HEADING-LINE2 02750002
027600 WRITE REPORT-RECORD FROM HEADING-LINE3 AFTER 2 02760002
027700 MOVE ZERO TO LINE-COUNT. 02770002
027800* 02780002
027900 DATE-TIME-PARA. 02790002
028000 EXEC SQL 02800002
028100 SELECT CURRENT DATE, CURRENT TIME 02810002
028200 INTO :WS-DATE, :WS-TIME 02820002
028300 FROM SYSIBM.SYSDUMMY1 02830002
028400 END-EXEC 02840002
028500 MOVE SQLCODE TO WS-SQLCODE 02850002
028600 DISPLAY 'DATE TIME SQL = ', WS-SQLCODE 02860002
028700* 02870002
028800 MOVE WS-DATE(1:4) TO OUT-DATE(7:4) 02880002
028900 MOVE WS-DATE(6:2) TO OUT-DATE(4:2) 02890002
029000 MOVE WS-DATE(9:2) TO OUT-DATE(1:2) 02900002
029100 MOVE '/' TO OUT-DATE(3:1) 02910002
029200 MOVE '/' TO OUT-DATE(6:1) 02920002
029300 MOVE WS-TIME TO OUT-TIME. 02930002
029400* 02940002
029500 END-PARA. 02950002
029600 MOVE SPACES TO HEADING-LINE3 02960002
029700 PERFORM HEADING-PARA 02970002
029800 INITIALIZE OUT-RECORD 02980002
029900* 02990002
030000* MOVE 'TOTALS : ' TO OUT-NAME 03000002
030100* MOVE TOTAL-EARN TO OUT-EARN 03010002
030200* MOVE TOTAL-DEDN TO OUT-DEDN 03020002
030300* MOVE TOTAL-EMP TO OUT-EMP 03030002
030400* MOVE OUT-EMP TO OUT-LOC 03040002
030500* 03050002
030600* SUBTRACT TOTAL-DEDN FROM TOTAL-EARN GIVING OUT-SAL 03060002
030700* WRITE REPORT-RECORD FROM OUT-RECORD 03070002
030800* 03080002
030900 PERFORM CLOSE-CURSOR 03090002
031000 CLOSE REPORT-FILE 03100002
031100 DISPLAY 'CLOSE REP FS = ', WS-REP-STAT. 03110002
031200* 03120002
031300 ERROR-PARA. 03130002
031400 CALL 'DSNTIAR' USING SQLCA, 03140002
031500 WS-ERR-MSG, 03150002
031600 WS-ERR-LRECL 03160002
031700 DISPLAY '*---*---*---*---*---*---*---*---*---*---*---*' 03170002
031800 PERFORM VARYING WS-SUB FROM 1 BY 1 UNTIL WS-SUB > 10 03180002
031900 DISPLAY WS-ERR-MSG-TEXT(WS-SUB) 03190002
032000 END-PERFORM. 03200002