Link Search Menu Expand Document

Click for the PDF file

Source code files

LRNRCB.jcl

//LRNRCB  JOB (9999,0000),'COMPILE DB2 BATCH',
//         TIME=1,
//         CLASS=A,
//         MSGCLASS=O,
//         NOTIFY=&SYSUID
//*
//********************************************************************
//*  DB2PC     DSNHPC     DB2   PRE-COMPILE                          *
//*  COB       IGYCRCTL   COBOL II COMPILE                           *
//*  LKED      IEWL       LINKEDIT                                   *
//********************************************************************
//*
//DB2PC   EXEC PGM=DSNHPC,REGION=2048K,
//        PARM=('APOST, DATE(ISO),HOST(IBMCOB),SOURCE,TIME(ISO),XREF')
//DBRMLIB  DD  DSN=LRNR.COURSEW.DBRMLIB(LNRCD002),DISP=SHR
//SYSIN    DD  DSN=LRNR.COURSEW.SOURCE(LNRCD002),DISP=SHR
//SYSLIB   DD  DSN=LRNR.COURSEW.COPY,DISP=SHR
//SYSCIN   DD  DSN=&&DSNHOUT,DISP=(NEW,PASS),
//             UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSPRINT DD  SYSOUT=*
//SYSTERM  DD  SYSOUT=*
//SYSUDUMP DD  SYSOUT=*
//SYSUT1   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT2   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//*
//*
//COB     EXEC PGM=IGYCRCTL,REGION=4M,
//        COND=(5,LT),
//        PARM='NODYN,LIB,NOSEQ,APOST,RENT,MAP,OFFSET,VBREF,XREF'
//SYSLIB   DD  DSN=LRNR.COURSEW.COPY,DISP=SHR
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  DSN=&&DSNHOUT,DISP=(SHR,DELETE)
//SYSLIN   DD  DSN=&&LOADSET,DISP=(MOD,PASS),
//             UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT1   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT2   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT3   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT4   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT5   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT6   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT7   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//*
//*
//LKED    EXEC PGM=IEWL,REGION=640K,
//        COND=(5,LT),
//        PARM=('SIZE=(512K,100K)',LIST,LET,XREF)
//SYSLIB   DD  DSN=CEE.SCEELKED,DISP=SHR    
//         DD  DSN=DSNA10.SDSNLOAD,DISP=SHR
//         DD  DSN=LRNR.COURSEW.LOADLIB,DISP=SHR
//SYSLMOD  DD  DSN=LRNR.COURSEW.LOADLIB(LNRCD002),DISP=SHR
//SYSUT1   DD  UNIT=SYSDA,DCB=BLKSIZE=1024,
//             SPACE=(CYL,(5,5))
//SYSPRINT DD  SYSOUT=*
//SYSLIN   DD  DSN=&&LOADSET,DISP=(OLD,DELETE)
//*

LRNCD002.cbl

       IDENTIFICATION DIVISION.
       PROGRAM-ID.    LRNCD002.

      ****************************************************************
      ***  PROGRAM: LRNCD002
      ***
      ***  DESC:    DEMONSTRATION PROGRAM FROM DATATRAIN DB2
      ***           PROGRAM WITHOUT DB2 STATEMENTS
      ***           REPORTS DUMMIED DATA FOR NUMBER OF EMPLOYEE
      ***           NUMBER OF DEPARTMENT and FIRST DEPARTMENT
      ***
      ***  INPUTS : NONE
      ***
      ***  OUTPUTS: DISPLAYED MESSAGES
      ***           DISPLAYED OUTPUT DATA
      ***           REP01  OUPUT REPORT
      ***
      ****************************************************************

       ENVIRONMENT DIVISION.

       INPUT-OUTPUT SECTION.

       FILE-CONTROL.
                  SELECT  REPORT-FILE           ASSIGN TO REPT1
                  ORGANIZATION IS SEQUENTIAL
                  ACCESS MODE IS SEQUENTIAL.

       DATA DIVISION.

       FILE SECTION.

       FD  REPORT-FILE
                  RECORD CONTAINS 133 CHARACTERS.

       01  REPORT-RECORD.
           03  PRINT-CNTL                  PIC X.
           03  PRINT-AREA                  PIC X(132).


       WORKING-STORAGE SECTION.

           EXEC SQL
              INCLUDE DEPART
           END-EXEC.

           EXEC SQL
              INCLUDE EMPEE
           END-EXEC.

           EXEC SQL
              INCLUDE SQLCA
           END-EXEC.


       01  PROGRAM-FIELDS.
           05  WS-ZERO                 PIC 9 VALUE 0.
           05  WS-RCODE                PIC  9(04) COMP.
           05  FILEERR-STATUS.
               10  FILEERR-STATUS1     PIC  X(01).
               10  FILEERR-STATUS2     PIC  X(01).
               10  FILEERR-STATUSX2N   PIC  9(03).
           10 WS-NUMBER-OF-DEPTS       PIC S9(4) USAGE COMP.
           10 WS-NUMBER-OF-EMPLOYEES   PIC S9(4) USAGE COMP.

       01  REPORT-BUFFER                 PIC  X(132).

       01  WS-RESULT-FIELDS.
           05 WS-TOTALS-RECORD.
               10 FILLER                        PIC X(30)
                     VALUE 'NUMBER OF DEPARTMENTS'.
               10 WS-NOD-REP                    PIC 9(6).
               10 FILLER                        PIC X(27)
                     VALUE '   NUMBER OF EMPLOYEEs'.
               10 WS-NOE-REP                   PIC 9(6).

           05 WS-DEPARTMENT-RECORD.
            10 FILLER                      PIC X(20)
                                  VALUE 'FIRST DEPARTMENT:'.
            10 WS-DEPARTMENT-N0                PIC 9(6).
            10 FILLER                      PIC X(3) VALUE SPACES.
            10 WS-DEPARTMENT-NAME          PIC x(40).
            10 FILLER                      PIC X(66) VALUE SPACES.


       LINKAGE SECTION.



       PROCEDURE DIVISION.

       0000-MAINLINE.
                  PERFORM 200-OPEN-FILES.
                  PERFORM 300-GET-DATA.
                  PERFORM 400-PROCESS-FILE.
                  PERFORM 900-CLOSE-FILES.
                  STOP RUN.


       200-OPEN-FILES.
           OPEN    OUTPUT  REPORT-FILE.

       300-GET-DATA.
      * DB2 CODE WILL GO HERE
           EXEC SQL
             WHENEVER SQLERROR GOTO 390-SQL-ERROR
           END-EXEC.

           EXEC SQL
                SELECT COUNT(*) INTO :WS-NUMBER-OF-DEPTS FROM DEPARTMENT
           END-EXEC.

           EXEC SQL
                SELECT COUNT(*) INTO :WS-NUMBER-OF-EMPLOYEES FROM EMPLOYEE
           END-EXEC.

            EXEC SQL
                SELECT DEPTNO, DEPTNAME                      
                INTO :DEPTNO, :DEPTNAME FROM DEPARTMENT            
                WHERE DEPTNO = (SELECT MIN(DEPTNO) FROM DEPARTMENT)
           END-EXEC.

           MOVE WS-NUMBER-OF-DEPTS     TO WS-NOD-REP.
           MOVE WS-NUMBER-OF-EMPLOYEES TO WS-NOE-REP.
           MOVE DEPTNO                 TO WS-DEPARTMENT-N0.
           MOVE DEPTNAME-TEXT          TO WS-DEPARTMENT-NAME.

       390-SQL-ERROR.
           DISPLAY 'SQLCODE ' SQLCODE.
           DISPLAY 'SQLSTATE' SQLSTATE.
           PERFORM  990-ABEND.

       400-PROCESS-FILE.
           MOVE    WS-TOTALS-RECORD              TO  PRINT-AREA.
           WRITE   REPORT-RECORD  AFTER 1.
           MOVE    WS-DEPARTMENT-RECORD          TO  PRINT-AREA.
           WRITE   REPORT-RECORD  AFTER 1.

       900-CLOSE-FILES.
           CLOSE   REPORT-FILE.

       910-EXIT.
           EXIT.

       990-ABEND.
           DIVIDE 1 BY WS-ZERO GIVING WS-ZERO.

LRNCD005.cbl

       IDENTIFICATION DIVISION.
       PROGRAM-ID.    LRNCD005.

      ****************************************************************
      ***  PROGRAM: LRNCD005
      ***
      ***  DESC:    DEMONSTRATION PROGRAM FROM DATATRAIN DB2
      ***
      ***  INPUTS : NONE
      ***
      ***  OUTPUTS: DISPLAYED MESSAGES
      ***           DISPLAYED OUTPUT DATA
      ***           REP01  OUPUT REPORT
      ***
      ****************************************************************

       ENVIRONMENT DIVISION.

       INPUT-OUTPUT SECTION.

       FILE-CONTROL.
                  SELECT  REPORT-FILE           ASSIGN TO REPT1
                  ORGANIZATION IS SEQUENTIAL
                  ACCESS MODE IS SEQUENTIAL.

       DATA DIVISION.

       FILE SECTION.

       FD  REPORT-FILE
                  RECORD CONTAINS 133 CHARACTERS.
       01  REPORT-RECORD.
           03  PRINT-CNTL                  PIC X.
           03  PRINT-AREA                  PIC X(132).

       WORKING-STORAGE SECTION.
           EXEC SQL
              INCLUDE DEPART
           END-EXEC.

           EXEC SQL
              INCLUDE EMPEE
           END-EXEC.

           EXEC SQL
              INCLUDE SQLCA
           END-EXEC.

       01 WC-CONSTANTS.
           05 WC-TRUE                  PIC 9 VALUE 1.
           05 WC-FALSE                 PIC 9 VALUE 0.
       01  WF-FLAGS.
           05 WF-END-OF-TABLE-FLAG    PIC 9.
              88 END-OF-TABLE VALUE 1.

       01  PROGRAM-FIELDS.
           05  WS-ZERO                 PIC 9 VALUE 0.
           05  WS-NULL-IND             PIC S9(4) USAGE COMP.
               88  NULL-SET VALUE -1.
       01  REPORT-BUFFER               PIC  X(132).

       01  WS-RESULT-FIELDS.
           05 WS-DEPARTMENT-RECORD.
            10 FILLER                      PIC X(20) VALUE SPACES.
            10 WS-DEPARTMENT-N0            PIC 9(6).
            10 FILLER                      PIC X(3) VALUE SPACES.
            10 WS-DEPARTMENT-NAME          PIC x(40).
            10 FILLER                      PIC X(6) VALUE SPACES.
            10 WS-DEPT-MGRNO               PIC X(6).
            10 FILLER                      PIC X(54) VALUE SPACES.

            EXEC SQL
               DECLARE CURR-DEPT CURSOR FOR
                  SELECT DEPTNO, DEPTNAME, MGRNO FROM DEPARTMENT 
                  FOR UPDATE OF MGRNO
            END-EXEC.

       LINKAGE SECTION.

       PROCEDURE DIVISION.

       0000-MAINLINE.
                  PERFORM 100-OPEN-CURSOR.

                  PERFORM 200-OPEN-FILES.
                  PERFORM 300-PROCESS-CURSOR.

                  PERFORM 900-CLOSE-FILES.
                  STOP RUN.

       100-OPEN-CURSOR.
           EXEC SQL
             WHENEVER SQLERROR GOTO 390-SQL-ERROR
           END-EXEC.
           EXEC SQL
              OPEN CURR-DEPT
           END-EXEC.

       200-OPEN-FILES.
           OPEN OUTPUT  REPORT-FILE.

       300-PROCESS-CURSOR.
           PERFORM 310-FETCH-AND-WRITE
              UNTIL END-OF-TABLE.

       310-FETCH-AND-WRITE.
           INITIALIZE DCLDEPARTMENT.
           PERFORM 320-FETCH-NEXT-ROW.
           IF SQLCODE = 100
              MOVE WC-TRUE to WF-END-OF-TABLE-FLAG
           ELSE
              PERFORM 325-UPDATE-ROW
              PERFORM 330-WRITE-RECORD
           END-IF.
       320-FETCH-NEXT-ROW.
           EXEC SQL
               FETCH CURR-DEPT
               INTO  :DEPTNO,
                     :DEPTNAME
           END-EXEC.

       325-UPDATE-ROW.
            EXEC SQL
               SELECT MIN(EMPNO)
               INTO  :EMPNO :WS-NULL-IND
               FROM EMPLOYEE
               WHERE WORKDEPT = :DEPTNO
           END-EXEC.
           IF NOT NULL-SET
              MOVE EMPNO TO MGRNO
           ELSE
              MOVE '000000' TO MGRNO
           END-IF.
           EXEC SQL
             UPDATE DEPARTMENT
                SET MGRNO = :MGRNO
             WHERE CURRENT OF CURR-DEPT
           END-EXEC.

       330-WRITE-RECORD.
           MOVE DEPTNO                 TO WS-DEPARTMENT-N0.
           MOVE DEPTNAME-TEXT          TO WS-DEPARTMENT-NAME.
           MOVE MGRNO                  TO WS-DEPT-MGRNO.
           MOVE WS-DEPARTMENT-RECORD   TO PRINT-AREA.
           WRITE REPORT-RECORD AFTER 1.
       380-END-DATA.
           EXIT.

       390-SQL-ERROR.
           DISPLAY 'SQLCODE ' SQLCODE.
           DISPLAY 'SQLSTATE' SQLSTATE.
           PERFORM  990-ABEND.

       900-CLOSE-FILES.
           CLOSE   REPORT-FILE.

       910-CLOSE-CURSOR.
           EXEC SQL
              CLOSE CURR-DEPT
           END-EXEC.
       990-ABEND.
           DIVIDE 1 BY WS-ZERO GIVING WS-ZERO.

       9900-EXIT.
           EXIT.