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.