V7R3环境下通过CRTSQLRPGI实现ILE RPG嵌入式SQL程序按引用绑定咨询
ILE RPG嵌入式SQL程序按引用绑定服务程序解决方案
方案1:分步编译(兼容性最高,所有版本通用)
不要通过CRTSQLRPGI直接生成*PGM对象,拆分为两步编译即可使用CRTPGM的BNDSRVPGM参数实现按引用绑定:
- 第一步:用
CRTSQLRPGI将调用程序源码编译为*MODULE对象,嵌入式SQL预编译逻辑不受影响:CRTSQLRPGI OBJ(你的库名/SNI600V) SRCFILE(你的库名/QRPGLESRC) OBJTYPE(*MODULE) /* 其他你常用的SQL编译参数,比如COMMIT、TGTRLS等 */ - 第二步:用
CRTPGM命令绑定模块生成最终程序,指定要按引用绑定的服务程序:CRTPGM PGM(你的库名/SNI600V) MODULE(你的库名/SNI600V) BNDSRVPGM(你的库名/SNILOG) DFTACTGRP(*NO) ACTGRP(*CALLER) /* 其他程序参数 */
方案2:直接在控制选项指定绑定服务程序(V7R2及以上版本支持,你的V7R3环境可用)
ILE RPG从V7R2版本开始就已在ctl-opt控制语句中支持BNDSRVPGM参数,直接在源码头部的控制语句添加即可,不需要分步编译:
ctl-opt dftactgrp(*no) bnddir('SNI_BNDDIR') bndsrvpgm(SNILOG); // 这里指定要按引用绑定的服务程序,多个服务程序用空格分隔
添加后直接用CRTSQLRPGI OBJTYPE(*PGM)命令一步编译即可,系统会自动按引用绑定指定的服务程序。
绑定结果验证
编译完成后执行DSPPGM PGM(你的库名/SNI600V)命令,查看「服务程序」列表,如果能看到SNILOG条目,说明已经是按引用绑定,此时删除SNILOG服务程序后调用程序会直接报错,符合要求。
内容的提问来源于stack exchange,提问作者Íñigo
相关产品推荐
相关产品推荐

