Db2 coprocessor integration

The integrated SQL coprocessor eliminates the need for precompilation with the Db2® precompiler in COBOL programs containing SQL statements.

The coprocessor 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.

The separate precompiler 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 benefits of the coprocessor approach include:

  • Compilation of COBOL programs with a single JOB step even if the source contains EXEC SQL (and EXEC CICS®) statements.
  • The ability to include source code that contains EXEC SQL statements using COPY statements is available.
  • Enhancements in interactive debugging of COBOL applications with Debug Tool. The application may be debugged at the original source level, instead of at the level of the expanded source produced by the separate Db2 precompiler.
  • There is only one output listing instead of two.
  • REPLACE statements can now affect EXEC SQL statements.
  • Nested programs that contain EXEC SQL statements can be held in separate files and included through a COPY statement.
The following job stream shows an example of using the Db2 precompiler:
//DB2PRE JOB ...,
// NOTIFY=GTAO,MSGCLASS=A,CLASS=A,TIME=(1,0),
// REGION=200M,MSGLEVEL=(1,1)
//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.
         GOBACK.  

//COB EXEC PGM=IGYCRCTL, 
//PARM=(NODYNAM,'BUF(12288)',SOURCE,NOXREF) 
//STEPLIB DD DSN=IGY.V5R1M0.SIGYCOMP,DISP=SHR 
//        DD DSN=CEE.SCEERUN,DISP=SHR 
//        DD DSN=CEE.SCEERUN2,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) 
//SYSUT8 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSUT9 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSUT10 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSUT11 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSUT12 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSUT13 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSUT14 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSUT15 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSMDECK DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND)
The following example shows the integrated SQL coprocessor:
//DB2INT JOB (GTAO,F342,090,M49),'Gianni Tao',
//NOTIFY=GTAO,MSGCLASS=A,CLASS=A,TIME=(1,0),
//REGION=200M,MSGLEVEL=(1,1)
//COB EXEC PGM=IGYCRCTL,
//PARM=(NODYNAM,'BUF(12288)',SOURCE,NOXREF,SQL)
//STEPLIB DD DSN=IGY.V5R1M0.SIGYCOMP,DISP=SHR
//        DD DSN=CEE.SCEERUN,DISP=SHR
//        DD DSN=CEE.SCEERUN2,DISP=SHR
//        DD DSN=DSN910.SDSNLOAD,DISP=SHR
//DBRMLIB DD DSN=GTAO.DBRMLIB.DATA(COBTEST),DISP=SHR
//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.
        GOBACK.

//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) 
//SYSUT8 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSUT9 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSUT10 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSUT11 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSUT12 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSUT13 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSUT14 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSUT15 DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND) 
//SYSMDECK DD UNIT=SYSDA,SPACE=(800,(500,500),,,ROUND)