coprocessor アプローチによって、SQL ステートメントを含む COBOL プログラムで DB2 プリコンパイラーを使用してプリコンパイルする必要がなくなります。
coprocessor アプローチでは、COBOL コンパイラーを使用してネイティブの COBOL とソース・プログラムに組み込まれた SQL ステートメントの両方を処理します。SQL ステートメントが検出された場合、コンパイラーは DB2 coprocessor とインターフェースをとります。DB2 coprocessor は適切な処置を行ってから、通常は、生成するネイティブ言語ステートメントを指示してコンパイラーに制御を戻します。
個別プリコンパイラー・アプローチは現在でも Enterprise COBOL でサポートされますが、coprocessor アプローチの方が望ましく、推奨されるソリューションです。coprocessor アプローチは使用可能度が高く、機能面でも優れています。特に、coprocessor ソリューションを使用すると、Debug Tool を使用した COBOL アプリケーションの対話式デバッグ機能が拡張されます。これは、DB2 プリコンパイラーによって生成された拡張ソースではなく、元のソース・レベルでアプリケーションをデバッグすることができるためです。
coprocessor アプローチには DB2 バージョン 7 以降が必要です。coprocessor アプローチには以下のような利点があります。
//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)