Skip to main content

IBM DB2 for i: Code example

RPG language programming example

    H
     F*  File declaration for QPRINT
     F*
     FQPRINT  O   F     132            PRINTER
     I*
     I* Structure for report 1.
     I*
     IRPT1      E DSPROJECT
     I              PROJNAME                        PROJNM
     I              RESPEMP                         RESEM
     I              PRSTAFF                         STAFF
     I              PRSTDATE                        PRSTD
     I              PRENDATE                        PREND
     I              MAJPROJ                         MAJPRJ
     I*
     I            DS
     I                                        1   6 EMPNO
     I                                        7  36 NAME
     I                                    P  37  412SALARY
     I*
     I* Structure for report 2.
     I*
     IRPT2        DS
     I                                        1   6 PRJNUM
     I                                        7  42 PNAME
     I                                    B  43  440EMPCNT
     I                                    P  45  492PRCOST
     I*
     I            DS
     I                                    B   1   20WRKDAY
     I                                    P   3   62COMMI
     I                                        7  16 RDATE
     I                                    P  17  202PERCNT
     C*
     C                     Z-ADD253       WRKDAY
     C                     Z-ADD2000.00   COMMI
     C                     Z-ADD1.04      PERCNT
     C                     MOVEL'1982-06-'RDATE
     C                     MOVE '01'      RDATE
     C                     SETON                     LR
     C*
     C* Update the selected projects by the new percentage. If an
     C* error occurs during the update, ROLLBACK the changes.
     C*
     C/EXEC SQL WHENEVER SQLERROR GOTO UPDERR
     C/END-EXEC
     C*
     C/EXEC SQL
     C+ UPDATE CORPDATA/EMPLOYEE
     C+    SET SALARY = SALARY * :PERCNT
     C+    WHERE COMM >= :COMMI
     C/END-EXEC
     C*
     C* Commit changes.
     C*
     C/EXEC SQL COMMIT
     C/END-EXEC
     C*
     C/EXEC SQL WHENEVER SQLERROR GO TO RPTERR
     C/END-EXEC
     C*
     C* Report the updated statistics for each employee assigned to
     C* selected projects.
     C*
     C* Write out the header for report 1.
     C*
     C                     EXCPTRECA
     C/EXEC SQL DECLARE C1 CURSOR FOR
     C+    SELECT DISTINCT PROJNO, EMP_ACT.EMPNO,
     C+           LASTNAME||', '||FIRSTNME, SALARY
     C+        FROM CORPDATA/EMP_ACT, CORPDATA/EMPLOYEE
     C+        WHERE EMP_ACT.EMPNO = EMPLOYEE.EMPNO AND
     C+              COMM >= :COMMI
     C+        ORDER BY PROJNO, EMPNO
     C/END-EXEC
     C*
     C/EXEC SQL
     C+  OPEN C1
     C/END-EXEC
     C*
     C* Fetch and write the rows to QPRINT.
     C*
     C/EXEC SQL WHENEVER NOT FOUND GO TO DONE1
     C/END-EXEC
     C           SQLCOD    DOUNE0
     C/EXEC SQL
     C+   FETCH C1 INTO :PROJNO,:EMPNO,:NAME, :SALARY
     C/END-EXEC
     C                     EXCPTRECB
     C                     END
     C           DONE1     TAG
     C/EXEC SQL
     C+  CLOSE C1
     C/END-EXEC
     C*
     C* For all project ending at a date later than the raise date
     C* (i.e. those projects potentially affected by the salary raises)
     C* generate a report containing the project number, project name,
     C* the count of employees participating in the project and the
     C* total salary cost of the project.
     C*
     C* Write out the header for report 2.
     C*
     C                     EXCPTRECC
     C/EXEC SQL
     C+  DECLARE C2 CURSOR FOR
     C+    SELECT EMP_ACT.PROJNO, PROJNAME, COUNT(*),
     C+       SUM((DAYS(EMENDATE) - DAYS(EMSTDATE)) * EMPTIME *
     C+           DECIMAL((SALARY/:WRKDAY),8,2))
     C+    FROM CORPDATA/EMP_ACT, CORPDATA/PROJECT, CORPDATA/EMPLOYEE
     C+    WHERE EMP_ACT.PROJNO = PROJECT.PROJNO AND
     C+          EMP_ACT.EMPNO = EMPLOYEE.EMPNO AND
     C+          PRENDATE > :RDATE
     C+    GROUP BY EMP_ACT.PROJNO, PROJNAME
     C+    ORDER BY 1
     C/END-EXEC
     C*
     C/EXEC SQL OPEN C2
     C/END-EXEC
     C*
     C* Fetch and write the rows to QPRINT.
     C*
     C/EXEC SQL WHENEVER NOT FOUND GO TO DONE2
     C/END-EXEC
     C           SQLCOD    DOUNE0
     C/EXEC SQL
     C+   FETCH C2 INTO :RPT2
     C/END-EXEC
     C                     EXCPTRECD
     C                     END
     C           DONE2     TAG
     C/EXEC SQL CLOSE C2
     C/END-EXEC
     C                     RETRN
     C*
     C* Error occurred while updating table.  Inform user and rollback
     C* changes.
     C*
     C           UPDERR    TAG
     C                     EXCPTRECE
     C/EXEC SQL WHENEVER SQLERROR CONTINUE
     C/END-EXEC
     C*
     C/EXEC SQL
     C+   ROLLBACK
     C/END-EXEC
     C                     RETRN
     C*
     C* Error occurred while generating reports.  Inform user and exit.
     C*
     C           RPTERR    TAG
     C                     EXCPTRECF
     C*
     C* All done.
     C*
     C           FINISH    TAG
     OQPRINT  E 0201           RECA
     O                                   45 'REPORT OF PROJECTS AFFEC'
     O                                   64 'TED BY EMPLOYEE RAISES'
     O        E 01             RECA
     O                                    7 'PROJECT'
     O                                   17 'EMPLOYEE'
     O                                   32 'EMPLOYEE NAME'
     O                                   60 'SALARY'
     O        E 01             RECB
     O                         PROJNO     6
     O                         EMPNO     15
     O                         NAME      50
     O                         SALARYL   61
     O        E 22             RECC
     O                                   42 'ACCUMULATED STATISTIC'
     O                                   54 'S BY PROJECT'
     O        E 01             RECC
     O                                    7 'PROJECT'
     O                                   56 'NUMBER OF'
     O                                   67 'TOTAL'
     O        E 02             RECC
     O                                    6 'NUMBER'
     O                                   21 'PROJECT NAME'
     O                                   56 'EMPLOYEES'
     O                                   66 'COST'
     O        E 01             RECD
     O                         PRJNUM     6
     O                         PNAME     45
     O                         EMPCNTL   54
     O                         PRCOSTL   70
     O        E 01             RECE
     O                                   28 '*** ERROR Occurred while'
     O                                   52 ' updating table. SQLCODE'
     O                                   53 '='
     O                         SQLCODL   62
     O        E 01             RECF
     O                                   28 '*** ERROR Occurred while'
     O                                   52 ' generating reports. SQL'
     O                                   57 'CODE='
     O                         SQLCODL   67