A coprocessor approach eliminates the need for precompilation with the DB2 precompiler in COBOL programs containing SQL statements.
The coprocessor approach uses the COBOL compiler to handle both native COBOL and imbedded SQL statements in the source program. When the SQL statements are encountered, the compiler interfaces with the DB2 coprocessor. The DB2 coprocessor takes appropriate actions and then returns to the compiler typically indicating what native language statements to generate.
A separate precompiler approach is still supported by DB2 and Enterprise COBOL, however the coprocessor approach is the preferred and recommended solution. The coprocessor approach provides improved usability and the highest level of functionality. In particular, interactive debugging of COBOL applications with Debug Tool is enhanced when the coprocessor solution is used, since the application may be debugged at the original source level, instead of at the level of the expanded source produced by the DB2 precompiler.
The coprocessor approach requires DB2 Version 7 or later. The benefits of a coprocessor approach include:
//DB2PRE JOB ..., //NOTIFY=GTAO,MSGCLASS=A,CLASS=A,TIME=(0,5), //REGION=10M,MSGLEVEL=(1,1)MIN00030 //PC EXEC PGM=DSNHPC, // PARM=’HOST(COB2),QUOTE,APOSTSQL,SOURCE,XREF’ //DBRMLIB DD DSN=GTAO.DBRMLIB.DATA(COBTEST),DISP=SHR //STEPLIB DD DSN=DSN910.SDSNLOAD,DISP=SHR //SYSCIN DD DSN=&&DSNHOUT,DISP=(MOD,PASS),UNIT=SYSDA, // SPACE=(800,(500,500)) //SYSPRINT DD SYSOUT=* //SYSTERM DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSUT1 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) //SYSUT2 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) //SYSIN DD * IDENTIFICATION DIVISION. PROGRAM-ID.COBTEST. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 RES PIC X(10). EXEC SQL INCLUDE SQLCA END-EXEC. PROCEDURE DIVISION. EXEC SQL SELECT COL1 INTO :RES FROM TABLE1 END-EXEC. //COB EXEC PGM=IGYCRCTL, //PARM=(QUOTE,NODYNAM,ADV,’BUF(12288)’,SOURCE,NOXREF) //STEPLIB DD DSN=IGY.V4R1M0.SIGYCOMP,DISP=SHR //SYSIN DD DSN=&&DSNHOUT,DISP=(OLD,DELETE) //SYSLIN DD DSN=&&LOADSET,DISP=(MOD,PASS),UNIT=SYSDA, //SPACE=(800,(500,500)) //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSUT1 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) //SYSUT2 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) //SYSUT3 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) //SYSUT4 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) //SYSUT5 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) //SYSUT6 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) //SYSUT7 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND)
//DB2INT JOB (GTAO,F342,090,M49),’Gianni Tao’, //NOTIFY=GTAO,MSGCLASS=A,CLASS=A,TIME=(0,5), //REGION=10M,MSGLEVEL=(1,1) //COB EXEC PGM=IGYCRCTL, //PARM=(QUOTE,NODYNAM,ADV,’BUF(12288)’,SOURCE,NOXREF) //STEPLIB DD DSN=IGY.V4R1M0.SIGYCOMP,DISP=SHR // DD DSN=DSN910.SDSNLOAD,DISP=SHR //DBRMLIB DD DSN=GTAO.DBRMLIB.DATA(COBTEST),DISP=SHR //SYSIN DD * CBL SQL(’HOST(COB2),QUOTE,APOSTSQL,SOURCE,XREF’),LIB IDENTIFICATION DIVISION. PROGRAM-ID.COBTEST. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 RES PIC X(10). EXEC SQL INCLUDE SQLCA END-EXEC. PROCEDURE DIVISION. EXEC SQL SELECT COL1 INTO :RES FROM TABLE1 END-EXEC. //SYSLIN DD DSN=&&LOADSET,DISP=(MOD,PASS),UNIT=SYSDA, //SPACE=(800,(500,500)) //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSUT1 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) //SYSUT2 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) //SYSUT3 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) //SYSUT4 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) //SYSUT5 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) //SYSUT6 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) //SYSUT7 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND)