0% found this document useful (0 votes)
27 views6 pages

Db2prog3 2

This document defines the data structures and variables used in a COBOL program that processes employee data from a database. It includes file definitions for input and output files, data structures for holding employee data retrieved from the database like name, location, earnings and deductions, variables for tracking errors, program status and totals. SQL statements are included to declare a cursor to select and retrieve employee records from database tables.

Uploaded by

oussama achouri
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)
27 views6 pages

Db2prog3 2

This document defines the data structures and variables used in a COBOL program that processes employee data from a database. It includes file definitions for input and output files, data structures for holding employee data retrieved from the database like name, location, earnings and deductions, variables for tracking errors, program status and totals. SQL statements are included to declare a cursor to select and retrieve employee records from database tables.

Uploaded by

oussama achouri
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/ 6

000100 IDENTIFICATION DIVISION.

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


You might also like