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