DSN8CLPL

Populates the PSEG_PHOTO (500K BLOB) and BMP_PHOTO (100K BLOB) columns of the EMP_PHOTO_RESUME sample table with data read from sequential data sets.

      ***************************************************************** 00010000
      * MODULE NAME = DSN8CLPL (DB2 SAMPLE PROGRAM)                   * 00020000
      *                                                               * 00030000
      * DESCRIPTIVE NAME = POPULATE LOB COLUMNS THAT EXCEED 32K WITH  * 00040000
      *                    DATA READ FROM SEQUENTIAL DATA SETS.       * 00050000
      *                                                               * 00060000
      *                                                               * 00070000
      *  Licensed Materials - Property of IBM                         * 00080000
      *                                                               * 00090000
      *  5635-DB2                                                     * 00100000
      *  (C) Copyright 1982, 2006 IBM Corp.                           * 00110000
      *  Status = Version 9                                           * 00120000
      *                                                               * 00130000
      * Function: Populates the PSEG_PHOTO (500K BLOB) and BMP_PHOTO  * 00140000
      *           (100K BLOB) columns of the EMP_PHOTO_RESUME sample  * 00150000
      *           table with data read from sequential data sets.     * 00160000
      *                                                               * 00170000
      *           LOB locators are used to avoid having to contain    * 00180000
      *           all thedata in the application's storage.           * 00190000
      *                                                               * 00200000
      *                                                               * 00210000
      *   Restrictions:                                               * 00220000
      *                                                               * 00230000
      * Module type: COBOL program                                    * 00240000
      *   Processor: DB2 PRECOMPILER,VS COBOL II                      * 00250000
      * Module size: See linkedit output                              * 00260000
      *  Attributes: Re-entrant and re-usable                         * 00270000
      *                                                               * 00280000
      * Entry Point: CEESTART (Language Environment entry point)      * 00290000
      *     Purpose: See Function                                     * 00300000
      *     Linkage: Standard MVS program invocation, no parameters   * 00310000
      *                                                               * 00320000
      *       Input: Symbolic label/name = PSEGIN00                   * 00330000
      *              Description = PSEG photo image data              * 00340000
      *                                                               * 00350000
      *              Symbolic label/name = BMPIN00                    * 00360000
      *              Description = BMP photo image data               * 00370000
      *                                                               * 00380000
      *       Input: Symbolic label/name = PSEGIN01                   * 00390000
      *              Description = PSEG photo image data              * 00400000
      *                                                               * 00410000
      *              Symbolic label/name = BMPIN01                    * 00420000
      *              Description = BMP photo image data               * 00430000
      *                                                               * 00440000
      *      Output: Symbolic label/name = SYSPRINT                   * 00450000
      *              Description = Report and messages                * 00460000
      *                                                               * 00470000
      * Normal Exit: Return Code = 0000                               * 00480000
      *              - Message: none                                  * 00490000
      *                                                               * 00500000
      *  Error Exit: Return Code = 0008                               * 00510000
      *                                                               * 00520000
      *           - Message: *** ERROR: DSN8CLPL DB2 Sample Program   * 00530000
      *                                 Unexpected SQLCODE encountered* 00540000
      *                                 at location xxx               * 00550000
      *                                 Error detailed below          * 00560000
      *                                 Processing terminated         * 00570000
      *                                 (DSNTIAR-formatted message    * 00580000
      *                                 follows).                     * 00590000
      *                                                               * 00600000
      *  Pseudocode:                                                  * 00610000
      *   DSN8CLPL:                                                   * 00620000
      *   - Open PSEGFILE00 to open the data set associated with      * 00630000
      *     DD PSEGIN00                                               * 00640000
      *   - Call B10000-GETPSEGREC00 to read the first record of the  * 00650000
      *     data set            *                                       00660000
      *     - Extract the employee serial from this record            * 00670000
      *   - Open BMPFILE00 to open the data set associated with       * 00680000
      *     DD BMPIN00                                                * 00690000
      *   - Call C10000-GETBMPREC00 to read the first record of the   * 00700000
      *     data set            *                                       00710000
      *   - Call D10000-PRIMEBLOBCOLS to:                             * 00720000
      *     (a) UPDATE the PSEG_PHOTO and BMP_PHOTO columns of the    * 00730000
      *         employee's row in the EMP_PHOTO_RESUME table with the * 00740000
      *         contents of these first records                       * 00750000
      *     (b) SELECT the PSEG_PHOTO and BMP_PHOTO columns back into * 00760000
      *         BLOB locators                                         * 00770000
      *   - Call B10000-GETPSEGREC00 to read the next record from     * 00780000
      *     PSEGIN00 DD                                               * 00790000
      *   - Do while not end of file for the PSEGIN00 DD              * 00800000
      *     - Call B30000-BUILDPSEGCOL to append the current PSEGIN00 * 00810000
      *       record to the PSEG BLOB locator                         * 00820000
      *     - Call B10000-GETPSEGREC00 to read the next record from   * 00830000
      *       PSEGIN00                                                * 00840000
      *   - Call C10000-GETBMPREC00 to read the next record from      * 00850000
      *     BMPIN00 DD                                                * 00860000
      *   - Do while not end of file for the BMPIN00 DD               * 00870000
      *     - Call C30000-BUILDBMPCOL to append the current BMPIN00   * 00880000
      *       record to the BMP BLOB locator                          * 00890000
      *     - Call C10000-GETBMPREC00 to read the next record from    * 00900000
      *       BMPIN00                                                 * 00910000
      *   - Call D20000-UPDATEBLOBCOLS to apply the BLOB locators to  * 00920000
      *     the PSEG_PHOTO and BMP_PHOTO columns of the employee's    * 00930000
      *     row in the EMP_PHOTO_RESUME table                         * 00940000
      *   - If all went well, call D30000-COMMITWORKUNIT to commit    * 00950000
      *     the change                                                * 00960000
      *   - Else call D40000-ROLLBACKWORKUNIT to roll back the changes* 00970000
      *   - Print a status line                                       * 00980000
      *   - Close the PSEGIN00 and BMPIN00 DD's                       * 00990000
      *                                                               * 01000000
      *   - Open PSEGFILE01 to open the data set associated with      * 01010000
      *     DD PSEGIN01                                               * 01020000
      *   - Call B10001-GETPSEGREC01 to read the first record of the  * 01030000
      *     data set                                                  * 01040000
      *     - Extract the employee serial from this record            * 01050000
      *   - Open BMPFILE01 to open the data set associated with       * 01060000
      *     DD BMPIN01                                                * 01070000
      *   - Call C10001-GETBMPREC01 to read the first record of the   * 01080000
      *     data set               *                                    01090000
      *   - Call D10000-PRIMEBLOBCOLS to:                             * 01100000
      *     (a) UPDATE the PSEG_PHOTO and BMP_PHOTO columns of the    * 01110000
      *         employee's row in the EMP_PHOTO_RESUME table with the * 01120000
      *         contents of these first records                       * 01130000
      *     (b) SELECT the PSEG_PHOTO and BMP_PHOTO columns back into * 01140000
      *         BLOB locators                                         * 01150000
      *   - Call B10001-GETPSEGREC01 to read the next record from     * 01160000
      *     PSEGIN01 DD                     *                           01170000
      *   - Do while not end of file for the PSEGIN01 DD              * 01180000
      *     - Call B30000-BUILDPSEGCOL to append the current PSEGIN01 * 01190000
      *       record to the PSEG BLOB locator                         * 01200000
      *     - Call B10001-GETPSEGREC01 to read the next record from   * 01210000
      *       PSEGIN01             *                                    01220000
      *   - Call C10001-GETBMPREC01 to read the next record from      * 01230000
      *     BMPIN01 DD                                                * 01240000
      *   - Do while not end of file for the BMPIN01 DD               * 01250000
      *     - Call C30000-BUILDBMPCOL to append the current BMPIN01   * 01260000
      *       record to the BMP BLOB locator                          * 01270000
      *     - Call C10001-GETBMPREC01 to read the next record from    * 01280000
      *       BMPIN01                                                 * 01290000
      *   - Call D20000-UPDATEBLOBCOLS to apply the BLOB locators to  * 01300000
      *     the PSEG_PHOTO and BMP_PHOTO columns of the employee's    * 01310000
      *     row in the EMP_PHOTO_RESUME table                         * 01320000
      *   - If all went well, call D30000-COMMITWORKUNIT to commit    * 01330000
      *     the change                                                * 01340000
      *   - Else call D40000-ROLLBACKWORKUNIT to roll back the changes* 01350000
      *   - Print a status line                                       * 01360000
      *   - Close the PSEGIN01 and BMPIN01 DD's                       * 01370000
      *  - If an SQL error occurs, invoke the sql_error routine to    * 01380000
      *    generate and display message text                          * 01390000
      *   End DSN8CLPL                                                * 01400000
      *                                                               * 01410000
      * B10000-GETPSEGREC00:                                          * 01420000
      *  - Read a record from the data set associated with PSEGIN00DD * 01430000
      *  - If end of file, set PSEG-MORERECS to false                 * 01440000
      * End B10000-GETPSEGREC00                                       * 01450000
      *                                                               * 01460000
      * B10001-GETPSEGREC01:                                          * 01470000
      *  - Read a record from the data set associated with PSEGIN01DD * 01480000
      *  - If end of file, set PSEG-MORERECS to false                 * 01490000
      * End B10001-GETPSEGREC01                                       * 01500000
      *                                                               * 01510000
      * C10000-GETBMPREC00:                                *            01520000
      *  - Read a record from the data set associated with BMPREC00 DD* 01530000
      *  - If end of file, set BMP-MORERECS to false                  * 01540000
      * End GETBMPREC00                                               * 01550000
      *                                                               * 01560000
      * C10000-GETBMPREC01:                                *            01570000
      *  - Read a record from the data set associated with BMPREC01 DD* 01580000
      *  - If end of file, set BMP-MORERECS to false                  * 01590000
      * End GETBMPREC01                                               * 01600000
      *                                                               * 01610000
      * D10000-PRIMEBLOBCOLS:                                         * 01620000
      *  - extract the employee serial from bytes 10-15 of the PSEG   * 01630000
      *     buffer.                                                   * 01640000
      *  - UPDATE the PSEG_PHOTO and BMP_PHOTO columns for the        * 01650000
      *    employee's row in the EMP_PHOTO_RESUME table from the      * 01660000
      *    PSEG and BMP records                                       * 01670000
      *  - SELECT the PSEG_PHOTO and BMP_PHOTO columns for the        * 01680000
      *    employee into LOB locators blPSEG1 and blBMP1              * 01690000
      * End D10000-PRIMEBLOBCOLS                                      * 01700000
      *                                                               * 01710000
      * B30000-BUILDPSEGCOL:                                          * 01720000
      *  - append the contents of the PSEG input record to the PSEG   * 01730000
      *    BLOB locator B1PSEG1 and assign to BLOB locator B1PSEG2    * 01740000
      *  - free BLOB locator B1PSEG1                                  * 01750000
      *  - set BLOB locator B1PSEG1 from BLOB locator B1PSEG2         * 01760000
      *  - free BLOB locator B1PSEG2                                  * 01770000
      * End B30000-BUILDPSEGCOL                                       * 01780000
      *                                                               * 01790000
      * C30000-BUILDBMPCOL:                                           * 01800000
      *  - append the contents of the BMP input record to the BMP     * 01810000
      *    BLOB locator B1BMP1 and assign to BLOB locator B1BMP2      * 01820000
      *  - free BLOB locator B1BMP1                                   * 01830000
      *  - set BLOB locator B1BMP1 from BLOB locator blBMP2           * 01840000
      *  - free BLOB locator B1BMP2                                   * 01850000
      * End C30000-BUILDBMPCOL                                        * 01860000
      *                                                               * 01870000
      * D20000-UPDATEBLOBCOLS:                                        * 01880000
      *  - UPDATE the PSEG_PHOTO and BMP_PHOTO columns for the        * 01890000
      *    employee's row in the EMP_PHOTO_RESUME table from the      * 01900000
      *    PSEG and BMP BLOB locators BMP BLPSEG1 and BLBMP1          * 01910000
      * End D20000-UPDATEBLOBCOLS                                     * 01920000
      *                                                               * 01930000
      * D30000-COMMITWORKUNIT:                                        * 01940000
      *  - commit the changes                                         * 01950000
      * End D30000-COMMITWORKUNIT                                     * 01960000
      *                                                               * 01970000
      * D40000-ROLLBACKWORKUNIT:                                      * 01980000
      *  - roll back the changes                                      * 01990000
      * End D40000-ROLLBACKWORKUNIT                                   * 02000000
      *                                                               * 02010000
      * D31100-CHECK-SQLCODE:                                         * 02020000
      *  - Verify that the prior SQL call completed successfully      * 02030000
      * End D31100-CHECK-SQLCODE                                      * 02040000
      *              *                                                  02050000
      * E31110-DETAIL-SQL-ERROR:                                      * 02060000
      *  - call DSNTIAR to format the unexpected SQLCODE.             * 02070000
      * End E31110-DETAIL-SQL-ERROR                                   * 02080000
      *                                                               * 02090000
      * F31111-PRINT-SQL-ERROR-MSG:                                   * 02100000
      *  - Print the message text                                     * 02110000
      * End F31111-PRINT-SQL-ERROR-MSG                                * 02120000
      *                                                               * 02130000
      ***************************************************************** 02140000
       IDENTIFICATION DIVISION.                                         02150000
       PROGRAM-ID. DSN8CLPL.                                            02160000
                                                                        02170000
       ENVIRONMENT DIVISION.                                            02180000
       CONFIGURATION SECTION.                                           02190000
       SOURCE-COMPUTER.  IBM-370.                                       02200000
       OBJECT-COMPUTER.  IBM-370.                                       02210000
                                                                        02220000
         INPUT-OUTPUT SECTION.                                          02230000
         FILE-CONTROL.                                                  02240000
                                                                        02250000
             SELECT PSEGFILE00 ASSIGN TO PSEGIN00                       02260000
                        ORGANIZATION IS SEQUENTIAL                      02270000
                        ACCESS IS SEQUENTIAL                            02280000
                        FILE STATUS IS PSEGFILE-STATUS.                 02290000
             SELECT BMPFILE00 ASSIGN TO BMPIN00                         02300000
                        ORGANIZATION IS SEQUENTIAL                      02310000
                        ACCESS IS SEQUENTIAL                            02320000
                        FILE STATUS IS BMPFILE-STATUS.                  02330000
             SELECT PSEGFILE01 ASSIGN TO PSEGIN01                       02340000
                        ORGANIZATION IS SEQUENTIAL                      02350000
                        ACCESS IS SEQUENTIAL                            02360000
                        FILE STATUS IS PSEGFILE-STATUS.                 02370000
             SELECT BMPFILE01 ASSIGN TO BMPIN01                         02380000
                        ORGANIZATION IS SEQUENTIAL                      02390000
                        ACCESS IS SEQUENTIAL                            02400000
                        FILE STATUS IS BMPFILE-STATUS.                  02410000
                                                                        02420000
       DATA DIVISION.                                                   02430000
                                                                        02440000
       FILE SECTION.                                                    02450000
                                                                        02460000
       FD  PSEGFILE00                                                   02470000
           RECORDING MODE IS V                                          02480000
           BLOCK CONTAINS 1 RECORDS                                     02490000
           RECORD IS VARYING FROM 4 TO 8184                             02500000
           DEPENDING ON PSEGLEN0.                                       02510000
                                                                        02520000
       01  PSEGRECORD00  PIC X(8184).                                   02530000
                                                                        02540000
       FD  PSEGFILE01                                                   02550000
           RECORDING MODE IS V                                          02560000
           BLOCK CONTAINS 1 RECORDS                                     02570000
           RECORD IS VARYING FROM 4 TO 8184                             02580000
           DEPENDING ON PSEGLEN1.                                       02590000
                                                                        02600000
       01  PSEGRECORD01  PIC X(8184).                                   02610000
                                                                        02620000
       FD  BMPFILE00                                                    02630000
           RECORDING MODE IS V                                          02640000
           BLOCK CONTAINS 1 RECORDS                                     02650000
           RECORD IS VARYING FROM 4 TO 8184                             02660000
           DEPENDING ON BMPLEN0.                                        02670000
                                                                        02680000
       01  BMPRECORD00   PIC X(8184).                                   02690000
                                                                        02700000
       FD  BMPFILE01                                                    02710000
           RECORDING MODE IS V                                          02720000
           BLOCK CONTAINS 1 RECORDS                                     02730000
           RECORD IS VARYING FROM 4 TO 8184                             02740000
           DEPENDING ON BMPLEN1.                                        02750000
                                                                        02760000
       01  BMPRECORD01   PIC X(8184).                                   02770000
                                                                        02780000
                                                                        02790000
       WORKING-STORAGE SECTION.                                         02800000
       77  PSEGLEN0         PIC 9(5) COMP.                              02810000
       77  BMPLEN0          PIC 9(5) COMP.                              02820000
       77  PSEGLEN1         PIC 9(5) COMP.                              02830000
       77  BMPLEN1          PIC 9(5) COMP.                              02840000
       01  PSEG-COLLEN      PIC S9(9) COMP VALUE  0.                    02850000
       01  BMP-COLLEN       PIC S9(9) COMP VALUE  0.                    02860000
       01  DB2IO-COMMAND    PIC X(35).                                  02870000
       01  PSEG-MORERECS    PIC XXX.                                    02880000
       01  BMP-MORERECS     PIC XXX.                                    02890000
                                                                        02900000
      ***************************************************************** 02910000
      * File status indicators                                          02920000
      ***************************************************************** 02930000
       01  FILE-STATUS-FIELD.                                           02940000
           05 PSEGFILE-STATUS                PIC XX.                    02950000
           05 BMPFILE-STATUS                 PIC XX.                    02960000
                                                                        02970000
      ***************************************************************** 02980000
      * Job status indicator                                            02990000
      ***************************************************************** 03000000
       01 STATUS1              PIC X(4).                                03010000
          88 NOT-OK  VALUE 'BAD '.                                      03020000
          88 OK      VALUE 'GOOD'.                                      03030000
                                                                        03040000
                                                                        03050000
                                                                        03060000
                                                                        03070000
      ******************** DB2 SQL COMMUNICATION AREA ******************03080000
      *     EXEC SQL INCLUDE SQLCA END-EXEC.                            03090000
                                                                        03100000
      **************************** DB2 TABLES **************************03110000
            EXEC SQL DECLARE  EMP_PHOTO_RESUME  TABLE                   03120000
               (        EMPNO  CHAR(06)     NOT NULL,                   03130000
                        EMP_ROWID  ROWID,                               03140000
                        PSEG_PHOTO  BLOB( 500K ),                       03150000
                        BMP_PHOTO  BLOB( 100K ),                        03160000
                        RESUME  CLOB(   5K )         )                  03170000
            END-EXEC.                                                   03180000
                                                                        03190000
                                                                        03200000
      ********** DB2 HOST AND NULL INDICATOR VARIABLES ***************  03210000
           EXEC SQL BEGIN DECLARE SECTION END-EXEC.                     03220000
       77  SQLCODE                PIC S9(9) COMP-4.                     03230000
       77  SQLSTATE               PIC X(5).                             03240000
       01  HVEMPNO     PIC X(6).                                        03250000
       01  PSEGINREC  USAGE IS SQL TYPE IS BLOB(8K).                    03260000
       01  NIPSEG-PHOTO  PIC S9(4) COMP-4 VALUE  0.                     03270000
       01  BMPINREC   USAGE IS SQL TYPE IS BLOB(8K).                    03280000
       01  NIBMP-PHOTO  PIC S9(4) COMP-4 VALUE  0.                      03290000
                                                                        03300000
      **************** DB2 LOB LOCATOR VARIABLES *********************  03310000
       01  BLPSEG1   USAGE IS SQL TYPE IS BLOB-LOCATOR.                 03320000
       01  BLPSEG2   USAGE IS SQL TYPE IS BLOB-LOCATOR.                 03330000
       01  BLBMP1    USAGE IS SQL TYPE IS BLOB-LOCATOR.                 03340000
       01  BLBMP2    USAGE IS SQL TYPE IS BLOB-LOCATOR.                 03350000
           EXEC SQL END DECLARE SECTION END-EXEC.                       03360000
                                                                        03370000
      ***************************************************************** 03380000
      * Buffer for receiving SQL error messages                         03390000
      ***************************************************************** 03400000
       01 ERROR-MESSAGE.                                                03410000
          02  ERROR-LEN            PIC S9(4)   COMP VALUE +960.         03420000
          02  ERROR-TEXT           PIC X(120)  OCCURS 10 TIMES          03430000
                                                INDEXED BY ERROR-INDEX. 03440000
       77 ERROR-TEXT-LEN           PIC S9(9)   COMP VALUE +120.         03450000
                                                                        03460000
       PROCEDURE DIVISION.                                              03470000
       A10000-BLOBEXAMPLE.                                              03480000
            DISPLAY '****************************************'          03490000
                    '****************************************'.         03500000
            DISPLAY '* DSN8CLPL DB2 SAMPLE PROGRAM'.                    03510000
            DISPLAY '****************************************'          03520000
                    '****************************************'.         03530000
            MOVE 'GOOD' TO STATUS1.                                     03540000
                                                                        03550000
      ********************************************************          03560000
      *     GET PSEGREC00 AND BMPREC00                                  03570000
      ********************************************************          03580000
            OPEN INPUT PSEGFILE00.                                      03590000
            MOVE "YES" TO PSEG-MORERECS.                                03600000
            PERFORM B10000-GETPSEGREC00.                                03610000
                                                                        03620000
            OPEN INPUT BMPFILE00.                                       03630000
            MOVE "YES" TO BMP-MORERECS.                                 03640000
            PERFORM C10000-GETBMPREC00.                                 03650000
                                                                        03660000
      *****************************************************             03670000
      * INIT THE PSEG AND BMP BLOB TABLE COLUMNS          *             03680000
      * FOR THE EMPLOYEE                                  *             03690000
      *****************************************************             03700000
            IF OK                                                       03710000
               PERFORM D10000-PRIMEBLOBCOLS                             03720000
            END-IF                                                      03730000
                                                                        03740000
      *************************************************************     03750000
      * READ THE SECOND RECORDS FROM THE PSEG AND BMP DATA SETS   *     03760000
      *************************************************************     03770000
            IF OK                                                       03780000
               PERFORM B10000-GETPSEGREC00                              03790000
            END-IF                                                      03800000
            IF OK                                                       03810000
               PERFORM C10000-GETBMPREC00                               03820000
            END-IF                                                      03830000
                                                                        03840000
      *************************************************************     03850000
      *APPEND REMAINING PSEG RECS TO PSEG PHOTO COL USING BLOB LOC*     03860000
      *************************************************************     03870000
            PERFORM UNTIL NOT-OK OR PSEG-MORERECS = "NO"                03880000
               PERFORM B30000-BUILDPSEGCOL                              03890000
               IF OK                                                    03900000
                  PERFORM B10000-GETPSEGREC00                           03910000
               END-IF                                                   03920000
            END-PERFORM                                                 03930000
                                                                        03940000
      *********************************************************         03950000
      *APPEND REMAINING BMP RECS TO BMP PHOTO COL USING BLOB  *         03960000
      *  LOCATOR                                              *         03970000
      *********************************************************         03980000
            PERFORM UNTIL NOT-OK OR BMP-MORERECS = "NO"                 03990000
               PERFORM C30000-BUILDBMPCOL                               04000000
               IF OK                                                    04010000
                  PERFORM C10000-GETBMPREC00                            04020000
               END-IF                                                   04030000
            END-PERFORM                                                 04040000
                                                                        04050000
      *********************************************************         04060000
      * APPLY THE DATA ASSOCIATED WITH THE PSEG AND BMP BLOB  *         04070000
      * LOCATORS TO THE TABLE                                 *         04080000
      *********************************************************         04090000
            IF OK                                                       04100000
               PERFORM D20000-UPDATEBLOBCOLS                            04110000
            END-IF                                                      04120000
                                                                        04130000
      *********************************************************         04140000
      * IF CLEAR STATUS, COMMIT THE WORK UNIT;                *         04150000
      * OTHERWISE, ROLLBACK                                   *         04160000
      *********************************************************         04170000
            IF OK                                                       04180000
               PERFORM D30000-COMMITWORKUNIT                            04190000
            ELSE                                                        04200000
               PERFORM D40000-ROLLBACKWORKUNIT.                         04210000
                                                                        04220000
                                                                        04230000
      **********************************************************        04240000
      * PRINT REPORT LINE                                      *        04250000
      **********************************************************        04260000
            IF OK THEN                                                  04270000
               DISPLAY 'FOLLOWING IS THE LOB POPULATION '               04280000
                       'STATISTICS FOR EMPLOYEE NUMBER ' HVEMPNO        04290000
               DISPLAY '*   - PSEG PHOTO BYTES... ' PSEG-COLLEN         04300000
               DISPLAY '*   - BMP PHOTO BYTES... ' BMP-COLLEN           04310000
               DISPLAY '****************************************'       04320000
                       '***************************************'        04330000
            END-IF                                                      04340000
                                                                        04350000
      **********************************************************        04360000
      * CLOSE DATA SETS FOR CURRENT PSEGIN00 AND BMPIN00 DDS   *        04370000
      **********************************************************        04380000
            CLOSE PSEGFILE00.                                           04390000
            CLOSE BMPFILE00.                                            04400000
                                                                        04410000
                                                                        04420000
      ********************************************************          04430000
      *     GET PSEGREC01 AND BMPREC01                                  04440000
      ********************************************************          04450000
            OPEN INPUT PSEGFILE01.                                      04460000
            MOVE "YES" TO PSEG-MORERECS.                                04470000
            PERFORM B10001-GETPSEGREC01.                                04480000
                                                                        04490000
            OPEN INPUT BMPFILE01.                                       04500000
            MOVE "YES" TO BMP-MORERECS.                                 04510000
            PERFORM C10001-GETBMPREC01.                                 04520000
                                                                        04530000
      *****************************************************             04540000
      * INIT THE PSEG AND BMP BLOB TABLE COLUMNS          *             04550000
      * FOR THE EMPLOYEE                                  *             04560000
      *****************************************************             04570000
            IF OK                                                       04580000
               PERFORM D10000-PRIMEBLOBCOLS                             04590000
            END-IF                                                      04600000
                                                                        04610000
      *************************************************************     04620000
      * READ THE SECOND RECORDS FROM THE PSEG AND BMP DATA SETS   *     04630000
      *************************************************************     04640000
            IF OK                                                       04650000
               PERFORM B10001-GETPSEGREC01                              04660000
            END-IF                                                      04670000
            IF OK                                                       04680000
               PERFORM C10001-GETBMPREC01                               04690000
            END-IF                                                      04700000
                                                                        04710000
      *************************************************************     04720000
      *APPEND REMAINING PSEG RECS TO PSEG PHOTO COL USING BLOB LOC*     04730000
      *************************************************************     04740000
            PERFORM UNTIL NOT-OK OR PSEG-MORERECS = "NO"                04750000
               PERFORM B30000-BUILDPSEGCOL                              04760000
               IF OK                                                    04770000
                  PERFORM B10001-GETPSEGREC01                           04780000
               END-IF                                                   04790000
            END-PERFORM                                                 04800000
                                                                        04810000
      *********************************************************         04820000
      *APPEND REMAINING BMP RECS TO BMP PHOTO COL USING BLOB  *         04830000
      *  LOCATOR                                              *         04840000
      *********************************************************         04850000
            PERFORM UNTIL NOT-OK OR BMP-MORERECS = "NO"                 04860000
               PERFORM C30000-BUILDBMPCOL                               04870000
               IF OK                                                    04880000
                  PERFORM C10001-GETBMPREC01                            04890000
               END-IF                                                   04900000
            END-PERFORM                                                 04910000
                                                                        04920000
      *********************************************************         04930000
      * APPLY THE DATA ASSOCIATED WITH THE PSEG AND BMP BLOB  *         04940000
      * LOCATORS TO THE TABLE                                 *         04950000
      *********************************************************         04960000
            IF OK                                                       04970000
               PERFORM D20000-UPDATEBLOBCOLS                            04980000
            END-IF                                                      04990000
                                                                        05000000
      *********************************************************         05010000
      * IF CLEAR STATUS, COMMIT THE WORK UNIT;                *         05020000
      * OTHERWISE, ROLLBACK                                   *         05030000
      *********************************************************         05040000
            IF OK                                                       05050000
               PERFORM D30000-COMMITWORKUNIT                            05060000
            ELSE                                                        05070000
               PERFORM D40000-ROLLBACKWORKUNIT.                         05080000
                                                                        05090000
                                                                        05100000
      **********************************************************        05110000
      * PRINT REPORT LINE                                      *        05120000
      **********************************************************        05130000
            IF OK THEN                                                  05140000
               DISPLAY 'FOLLOWING IS THE LOB POPULATION '               05150000
                       'STATISTICS FOR EMPLOYEE NUMBER ' HVEMPNO        05160000
               DISPLAY '*   - PSEG PHOTO BYTES... ' PSEG-COLLEN         05170000
               DISPLAY '*   - BMP PHOTO BYTES... ' BMP-COLLEN           05180000
               DISPLAY '****************************************'       05190000
                       '***************************************'        05200000
            END-IF                                                      05210000
                                                                        05220000
      **********************************************************        05230000
      * CLOSE DATA SETS FOR CURRENT PSEGINNN AND BMPINNN DDS   *        05240000
      **********************************************************        05250000
            CLOSE PSEGFILE01.                                           05260000
            CLOSE BMPFILE01.                                            05270000
                                                                        05280000
            DISPLAY '****************************************'          05290000
                    '****************************************'.         05300000
                                                                        05310000
            IF NOT-OK                                                   05320000
               MOVE 8 TO RETURN-CODE                                    05330000
            ELSE                                                        05340000
               MOVE 0 TO RETURN-CODE.                                   05350000
                                                                        05360000
            STOP RUN.                                                   05370000
                                                                        05380000
                                                                        05390000
       B10000-GETPSEGREC00.                                             05400000
      ***********************************************************       05410000
      * OPEN THE PSEGIN00 DD DATA SET                           *       05420000
      ***********************************************************       05430000
            READ PSEGFILE00                                             05440000
                     AT END MOVE "NO" TO PSEG-MORERECS.                 05450000
            MOVE 0 TO PSEGINREC-LENGTH.                                 05460000
      *     DISPLAY "****** PSEGFILE-STATUS = <"                        05470000
      *             PSEGFILE-STATUS                                     05480000
      *             ">".                                                05490000
                                                                        05500000
            ADD PSEGLEN0 TO PSEGINREC-LENGTH.                           05510000
            MOVE PSEGRECORD00(1:PSEGLEN0) TO PSEGINREC-DATA.            05520000
                                                                        05530000
                                                                        05540000
       B10001-GETPSEGREC01.                                             05550000
      ***********************************************************       05560000
      * OPEN THE PSEGIN01 DD DATA SET                           *       05570000
      ***********************************************************       05580000
            READ PSEGFILE01                                             05590000
                     AT END MOVE "NO" TO PSEG-MORERECS.                 05600000
            MOVE 0 TO PSEGINREC-LENGTH.                                 05610000
      *     DISPLAY "****** PSEGFILE-STATUS = <"                        05620000
      *             PSEGFILE-STATUS                                     05630000
      *             ">".                                                05640000
            ADD PSEGLEN1 TO PSEGINREC-LENGTH.                           05650000
            MOVE PSEGRECORD01(1:PSEGLEN1) TO PSEGINREC-DATA.            05660000
                                                                        05670000
                                                                        05680000
       C10000-GETBMPREC00.                                              05690000
      *********************************************************         05700000
      * OPEN THE BMPIN00 DD DATA SET                          *         05710000
      *********************************************************         05720000
            READ BMPFILE00                                              05730000
                  AT END MOVE "NO" TO BMP-MORERECS.                     05740000
            MOVE 0 TO BMPINREC-LENGTH.                                  05750000
      *     DISPLAY "****** BMPFILE-STATUS = <"                         05760000
      *             BMPFILE-STATUS                                      05770000
      *             "> FROM C10000-GETBMPREC00".                        05780000
            ADD BMPLEN0 TO BMPINREC-LENGTH.                             05790000
            MOVE BMPRECORD00(1:BMPLEN0)                                 05800000
                   TO BMPINREC-DATA.                                    05810000
                                                                        05820000
       C10001-GETBMPREC01.                                              05830000
      *********************************************************         05840000
      * OPEN THE BMPIN01 DD DATA SET                          *         05850000
      *********************************************************         05860000
            READ BMPFILE01                                              05870000
                  AT END MOVE "NO" TO BMP-MORERECS.                     05880000
            MOVE 0 TO BMPINREC-LENGTH.                                  05890000
      *     DISPLAY "****** BMPFILE-STATUS = <"                         05900000
      *             BMPFILE-STATUS                                      05910000
      *             "> FROM C10001-GETBMPREC01".                        05920000
            ADD BMPLEN1 TO BMPINREC-LENGTH.                             05930000
            MOVE BMPRECORD01(1:BMPLEN1) TO BMPINREC-DATA.               05940000
                                                                        05950000
                                                                        05960000
       D10000-PRIMEBLOBCOLS.                                            05970000
      *******************************************************           05980000
      * EXTRACT THE EMPLOYEE SERIAL FROM BYTES 10-15 OF     *           05990000
      * THE PSEG    BUFFER.                                 *           06000000
      *******************************************************           06010000
            MOVE PSEGINREC-DATA(10:15) TO HVEMPNO.                      06020000
                                                                        06030000
      ********************************************************          06040000
      * INITIALIZE THE BLOB COLUMNS WITH DATA FROM THE       *          06050000
      * 1ST INPUT RECORDS                                    *          06060000
      ********************************************************          06070000
            EXEC SQL UPDATE  EMP_PHOTO_RESUME                           06080000
                 SET  PSEG_PHOTO = :PSEGINREC,                          06090000
                      BMP_PHOTO  = :BMPINREC                            06100000
                 WHERE  EMPNO = :HVEMPNO                                06110000
            END-EXEC.                                                   06120000
                                                                        06130000
            IF SQLCODE IS NOT EQUAL TO ZERO                             06140000
               MOVE 'PRIMEBLOBCOLS @ UPDATE' TO DB2IO-COMMAND           06150000
               PERFORM D31100-CHECK-SQLCODE                             06160000
            END-IF                                                      06170000
                                                                        06180000
                                                                        06190000
      *********************************************************         06200000
      * SELECT THE INITIAL BLOB DATA INTO LOCATORS            *         06210000
      *********************************************************         06220000
            IF OK                                                       06230000
               EXEC SQL SELECT  PSEG_PHOTO, BMP_PHOTO                   06240000
                    INTO :BLPSEG1 :NIPSEG-PHOTO,                        06250000
                         :BLBMP1  :NIBMP-PHOTO                          06260000
                    FROM  EMP_PHOTO_RESUME                              06270000
                    WHERE  EMPNO = :HVEMPNO                             06280000
               END-EXEC                                                 06290000
                                                                        06300000
               IF SQLCODE IS NOT EQUAL TO ZERO                          06310000
                   MOVE 'PRIMEBLOBCOLS @ SELECT' TO DB2IO-COMMAND       06320000
                   PERFORM D31100-CHECK-SQLCODE                         06330000
               END-IF                                                   06340000
            END-IF                                                      06350000
                                                                        06360000
            MOVE PSEGINREC-LENGTH TO PSEG-COLLEN.                       06370000
            MOVE BMPINREC-LENGTH TO BMP-COLLEN.                         06380000
                                                                        06390000
                                                                        06400000
       B30000-BUILDPSEGCOL.                                             06410000
      *********************************************************         06420000
      * GENERATE A NEW BLOB LOCATOR THAT CONTAINS THE CURRENT *         06430000
      * INPUT RECORD APPENDED TO THE CURRENT PSEG-PHOTO LOCATOR*        06440000
      *********************************************************         06450000
            EXEC SQL SET  :BLPSEG2 =                                    06460000
              SUBSTR( :BLPSEG1, 1, LENGTH(:BLPSEG1) ) ||  :PSEGINREC    06470000
            END-EXEC.                                                   06480000
                                                                        06490000
            IF SQLCODE IS NOT EQUAL TO ZERO                             06500000
               MOVE 'BUILDPSEGCOL @ SET LOCATOR #2' TO DB2IO-COMMAND    06510000
               PERFORM D31100-CHECK-SQLCODE.                            06520000
                                                                        06530000
      *************************************************************     06540000
      *REGENERATE THE PSEG-PHOTO LOCATOR FROM THE UPDATED LOCATOR *     06550000
      *************************************************************     06560000
            IF OK                                                       06570000
               EXEC SQL FREE LOCATOR :BLPSEG1 END-EXEC                  06580000
               IF SQLCODE IS NOT EQUAL TO ZERO                          06590000
                  MOVE 'BUILDPSEGCOL @ FREE LOCATOR #1' TO DB2IO-COMMAND06600000
                  PERFORM D31100-CHECK-SQLCODE                          06610000
               END-IF                                                   06620000
            END-IF                                                      06630000
                                                                        06640000
            IF OK                                                       06650000
               EXEC SQL SET :BLPSEG1 = :BLPSEG2 END-EXEC                06660000
               IF SQLCODE IS NOT EQUAL TO ZERO                          06670000
                  MOVE 'BUILDPSEGCOL @ SET LOCATOR #1' TO DB2IO-COMMAND 06680000
                  PERFORM D31100-CHECK-SQLCODE                          06690000
               END-IF                                                   06700000
            END-IF                                                      06710000
                                                                        06720000
                                                                        06730000
            IF OK                                                       06740000
               EXEC SQL FREE LOCATOR :BLPSEG2 END-EXEC                  06750000
               IF SQLCODE IS NOT EQUAL TO ZERO                          06760000
                  MOVE 'BUILDPSEGCOL @ FREE LOCATOR #2' TO DB2IO-COMMAND06770000
                  PERFORM D31100-CHECK-SQLCODE                          06780000
               END-IF                                                   06790000
            END-IF                                                      06800000
                                                                        06810000
      *********************************************************         06820000
      * UPDATE LENGTH OF PSEG-PHOTO COLUMN                    *         06830000
      *********************************************************         06840000
            IF OK                                                       06850000
               ADD PSEGINREC-LENGTH TO PSEG-COLLEN.                     06860000
                                                                        06870000
                                                                        06880000
       C30000-BUILDBMPCOL.                                              06890000
      *********************************************************         06900000
      * GENERATE A NEW BLOB LOCATOR THAT CONTAINS THE CURRENT *         06910000
      * INPUT RECORD APPENDED TO THE CURRENT BMP-PHOTO LOCATOR*         06920000
      *********************************************************         06930000
            EXEC SQL SET  :BLBMP2 =                                     06940000
               SUBSTR( :BLBMP1, 1, LENGTH(:BLBMP1) ) ||  :BMPINREC      06950000
            END-EXEC.                                                   06960000
                                                                        06970000
            IF SQLCODE IS NOT EQUAL TO ZERO                             06980000
               MOVE 'BUILDBMPCOL @ SET LOCATOR #2' TO DB2IO-COMMAND     06990000
               PERFORM D31100-CHECK-SQLCODE.                            07000000
                                                                        07010000
      *************************************************************     07020000
      * REGENERATE THE BMP-PHOTO LOCATOR FROM THE UPDATED LOCATOR *     07030000
      *************************************************************     07040000
            IF OK                                                       07050000
               EXEC SQL FREE LOCATOR :BLBMP1 END-EXEC                   07060000
               IF SQLCODE IS NOT EQUAL TO ZERO                          07070000
                  MOVE 'BUILDBMPCOL @ FREE LOCATOR #1' TO DB2IO-COMMAND 07080000
                  PERFORM D31100-CHECK-SQLCODE                          07090000
               END-IF                                                   07100000
            END-IF                                                      07110000
                                                                        07120000
                                                                        07130000
            IF OK                                                       07140000
               EXEC SQL SET :BLBMP1 = :BLBMP2 END-EXEC                  07150000
               IF SQLCODE IS NOT EQUAL TO ZERO                          07160000
                  MOVE 'BUILDBMPCOL @ SET LOCATOR #1' TO DB2IO-COMMAND  07170000
                  PERFORM D31100-CHECK-SQLCODE                          07180000
               END-IF                                                   07190000
            END-IF                                                      07200000
                                                                        07210000
            IF OK                                                       07220000
               EXEC SQL FREE LOCATOR :BLBMP2 END-EXEC                   07230000
               IF SQLCODE IS NOT EQUAL TO ZERO                          07240000
                  MOVE 'BUILDBMPCOL @ FREE LOCATOR #2' TO DB2IO-COMMAND 07250000
                  PERFORM D31100-CHECK-SQLCODE                          07260000
               END-IF                                                   07270000
            END-IF                                                      07280000
                                                                        07290000
      ***************************************************************   07300000
      * UPDATE LENGTH OF BMP_PHOTO COLUMN                           *   07310000
      ***************************************************************   07320000
            IF OK                                                       07330000
               ADD BMPINREC-LENGTH TO BMP-COLLEN.                       07340000
                                                                        07350000
                                                                        07360000
       D20000-UPDATEBLOBCOLS.                                           07370000
      *************************************************************     07380000
      * CALLED BY THE MAIN ROUTINE TO APPLY THE BLOB ENTITIES     *     07390000
      * CONSTRUCTED FROM THE PSEGIN AND BMPIN INPUT FILES BY THE  *     07400000
      * BUILDPSEGCOL AND BUILDBMPCOL FUNCTIONS AND POINTED TO BY  *     07410000
      * THE BLPSEG1 AND BLBMP1 BLOB LOCATORS TO THE PSEG-PHOTO AND*     07420000
      * BMP-PHOTO COLUMNS OF THE EMP_PHOTO_RESUME_TABLE.          *     07430000
      *************************************************************     07440000
            EXEC SQL UPDATE  EMP_PHOTO_RESUME                           07450000
               SET  PSEG_PHOTO = :BLPSEG1,                              07460000
                    BMP_PHOTO  = :BLBMP1                                07470000
               WHERE  EMPNO = :HVEMPNO                                  07480000
            END-EXEC.                                                   07490000
                                                                        07500000
            IF SQLCODE IS NOT EQUAL TO ZERO                             07510000
               MOVE 'UPDATEBLOBCOLS @ UPDATE' TO DB2IO-COMMAND          07520000
               PERFORM D31100-CHECK-SQLCODE.                            07530000
                                                                        07540000
                                                                        07550000
       D30000-COMMITWORKUNIT.                                           07560000
      *************************************************************     07570000
      * CALLED BY THE MAIN ROUTINE TO COMMIT THE CURRENT UNIT OF  *     07580000
      * WORK, WHICH IS COMPOSED OF A FULLY-BUILT PSEG ENTRY AND A *     07590000
      * FULLY-BUILT BMP ENTRY FOR THE CURRENT EMPLOYEE.           *     07600000
      *************************************************************     07610000
            EXEC SQL COMMIT END-EXEC.                                   07620000
                                                                        07630000
            IF SQLCODE IS NOT EQUAL TO ZERO                             07640000
               MOVE 'COMMITWORKUNIT @ COMMIT' TO DB2IO-COMMAND          07650000
               PERFORM D31100-CHECK-SQLCODE.                            07660000
                                                                        07670000
       D40000-ROLLBACKWORKUNIT.                                         07680000
      *************************************************************     07690000
      * CALLED BY THE MAIN ROUTINE TO ROLLBACK THE CURRENT UNIT OF*     07700000
      * WORK,WHICH IS COMPOSED OF A FULLY-BUILT PSEG ENTRY AND A  *     07710000
      * FULLY-BUILT BMP ENTRY FOR THE CURRENT EMPLOYEE.           *     07720000
      *************************************************************     07730000
            EXEC SQL ROLLBACK END-EXEC.                                 07740000
                                                                        07750000
            IF SQLCODE IS NOT EQUAL TO ZERO                             07760000
               MOVE 'ROLLBACKWORKUNIT @ ROLLBACK' TO DB2IO-COMMAND      07770000
               PERFORM D31100-CHECK-SQLCODE.                            07780000
                                                                        07790000
                                                                        07800000
       D31100-CHECK-SQLCODE.                                            07810000
      ****************************************************************  07820000
      * Verify that the prior SQL call completed successfully        *  07830000
      ****************************************************************  07840000
            IF SQLCODE NOT = 0 THEN                                     07850000
               MOVE 'BAD' TO STATUS1.                                   07860000
               DISPLAY '*    UNEXPECTED SQLCODE FROM DSN8CLPL'          07870000
                            'DURING ' DB2IO-COMMAND ' REQUEST.'         07880000
               DISPLAY '*'                                              07890000
               PERFORM E31110-DETAIL-SQL-ERROR.                         07900000
                                                                        07910000
                                                                        07920000
       E31110-DETAIL-SQL-ERROR.                                         07930000
      ****************************************************************  07940000
      * CALL DSNTIAR TO RETURN A TEXT MESSAGE FOR AN UNEXPECTED         07950000
      * SQLCODE.                                                        07960000
      ****************************************************************  07970000
            CALL 'DSNTIAR' USING SQLCA ERROR-MESSAGE ERROR-TEXT-LEN.    07980000
            IF RETURN-CODE = ZERO                                       07990000
               PERFORM F31111-PRINT-SQL-ERROR-MSG VARYING ERROR-INDEX   08000000
                  FROM 1 BY 1 UNTIL ERROR-INDEX GREATER THAN 10.        08010000
                                                                        08020000
      *                                           **MESSAGE FORMAT      08030000
      *                                           **ROUTINE ERROR       08040000
      *                                           **PRINT ERROR MESSAG  08050000
                                                                        08060000
                                                                        08070000
       F31111-PRINT-SQL-ERROR-MSG.                                      08080000
      ****************************************************************  08090000
      * PRINT MESSAGE TEXT                                              08100000
      ****************************************************************  08110000
            DISPLAY ERROR-TEXT (ERROR-INDEX).                           08120000