DB2程序的开发

编译,执行访问DB2程序

下面的例子中,假设用户是IBMUSER, C程序是 IBMUSER.DEVP.SRC(TCDB), 编译脚本放在IBMUSER.DEVP.JCL中.

编译用的JCL 脚本

//TCDBJCL JOB CLASS=A,                          
//    MSGCLASS=A,NOTIFY=&SYSUID                 
//*COMPILE AND LINK A DB2 PROGRAM               
//PREC  EXEC DSNHC,REGION=75M,                  
//    USER='IBMUSER',                           
//    MEM='TCDB',                               
//    PARM.PC='CCSID(1388),HOST(C)',            
//    PARM.C='LOCALE("ZH_CN.IBM-1388")'         
//PC.SYSIN DD DSN=IBMUSER.DEVP.SRC(TCDB),DISP=SHR 
//LKED.SYSIN  DD *                              
  NAME TCDB(R)                                  
/*

实验步骤

  1. 建立数据集 新建下面的dataset(因为编目过程DSNHC中默认使用了下面的数据集)
    IBMUSER.DBRMLIB.DATA
    IBMUSER.RUNLIB.LOAD
    IBMUSER.SRCLIB.DATA
    
  2. 运行编译JCL, 检查上面的dataset
  3. 在DB2I中bind plan
    1. 选择DB2I 5 BIND/REBIND/FREE
    2. 选择1 BIND PLAN
    3. MEMBER: TCDB; LIBRARY: IBMUSER.DBRMLIB.DATA; PLAN NAME: TCDB; CURRENT SERVER : DALLAS9
    4. 注意选择ENCODING为 01388 或者使用下面的脚本BIND
      //BINDPPD JOB CLASS=A,MSGCLASS=H,REGION=0M,NOTIFY=&SYSUID 
      //BIND     EXEC PGM=IKJEFT01,DYNAMNBR=100           
      //STEPLIB  DD DSN=DSN910.DB9G.RUNLIB.LOAD,DISP=SHR  
      //         DD DSN=DSN910.DB9G.SDSNEXIT,DISP=SHR     
      //         DD DSN=DSN910.SDSNLOAD,DISP=SHR          
      //DBRMLIB  DD DISP=SHR,DSN=ADB720.SADBDBRM          
      //SYSTSPRT DD SYSOUT=*                              
      //SYSPRINT DD SYSOUT=*                              
      //SYSUDUMP DD SYSOUT=*                              
      //SYSTSIN  DD *                                     
      DSN SYSTEM(DB9G)
      BIND PACKAGE(TCDB) MEMBER(TCDB) -
      ACTION(REPLACE) ISOLATION(CS) ENCODING(1388) -
      LIBRARY('IBMUSER.DBRMLIB.DATA')
      BIND PLAN(TCDB) PKLIST(TCDB.*) -
      ISOLATION(CS) ENCODING(1388) ACTION(REPLACE)
      END                     
      //
      

运行程序的JCL脚本

//RUNDBJCL JOB USER=IBMUSER,NOTIFY=&SYSUID      
//GO EXEC PGM=IKJEFT01,DYNAMNBR=20              
//STEPLIB DD DSN=DSN810.SDSNEXIT,DISP=SHR       
// DD DSN=DSN810.SDSNLOAD,DISP=SHR              
//SYSTSPRT DD SYSOUT=A                          
//SYSTSIN DD *                                  
DSN SYSTEM (DB9G)                               
RUN PROG (TCDB) PLAN (TCDB) LIB (RUNLIB.LOAD)   
END 
/*

运行检查JCL输出

可以将编译、绑定、执行脚本放在一个JCL中,或者定义CLIST

备注

  • 在预编译过程中出现ABEND S213错误、SB14 等错误
    • DBRM数据集的类型不对。DBRM数据的类型参见项目数据集属性
  • S806错误
    • 编译JCL脚本不对。(调用编目过程的问题)

另外,这里使用的BIND脚本和RUN脚本不是完善;将每个DBRM程序BIND到单独的PLAN中可以解决单个程序的运行, 但在调用函数等情况的时候就无法使用这种方式。可以参考DB2预提供的ADBBIND脚本中关于PACKAGE和PLAN的使用方案。

DB2预编译器

如需要查看DB2预编译器预处理后的代码,可以在编译脚本中指定DD定义SYSCIN

The DB2 precompiler writes the source statements that it processes to SYSCIN, 
the input data set to the compiler or assembler. 
This data set must have attributes RECFM F or FB, and LRECL 80. 
The modified source code contains calls to the DB2 language interface. 
The SQL statements that the calls replace appear as comments. 
This data set uses the CCSID of the source program.

更为详细参考参考资料10中Chapt 11.Preparing an application to run on DB2 for z/OS

results matching ""

    No results matching ""