ILE RPG 使用 CRTSQLRPGI 通过引用绑定
ILE RPG Bind by reference using CRTSQLRPGI
我一直在尝试解决这个问题,但是。我找不到它。
我想做的是使用“按引用绑定”功能,但使用嵌入式 sql.
编写的 ILE RPG
我可以在源代码中使用 BNDDIR ctl opt。一切正常。
但这意味着“通过复制绑定”方法。检查删除 SRVPGM 甚至 BINDDIR。并且调用程序仍然有效。
那么,有什么方法可以在 ILERPGSQL 程序中使用“按引用绑定”吗?
在我的问题之后,举个例子:
程序SNILOG是一个模块,包含几个程序。其中一部分,出口。
在 QSRVSRC 中,我设置了导出的程序,源程序同名:SNILOG。像这样:
STRPGMEXP PGMLVL(*CURRENT)
/************************************************** ******************/
/* *MODULE SNILOG INIGREDI 04/10/21 15:25:30 */
/************************************************** ******************/
EXPORT SYMBOL("GETDIAG_TOSTRING")
EXPORT SYMBOL("GETDIAGNOSTICS")
EXPORT SYMBOL("GRABAR_LOG")
EXPORT SYMBOL("SNILOG")
ENDPGMEXP
由于部分程序是用嵌入式编程的sql,编译必须用CRTSQLRPGI,使用参数OBJTYPE(*SRVPGM)。
所以,我终于得到了一个名为 SNILOG 的 SRVPGM,其中导出了这 4 个程序。
获得 SRVPGM 后,我将其添加到名为 SNI_BNDDIR 的 BNDDIR。
好了,我们进入主叫程序:SNI600V。
定义为
dftactgrp(*no)
,当然!
并使用 CRTSQLRPGI 和参数 OBJTYPE(*PGM).
编译
在这里,如果我使用控制规范
bnddir('SNI_BNDDIR')
,效果很好。
但还不够好,因为这是一种“通过复制绑定”的方法(我可以删除 SRVPGM 或 BNDDIR,它仍然可以正常工作)。
当我不使用 SQL 时,我可以使用 CRTPGM 命令,我可以设置 BNDSRVPGM 参数,以设置程序将要调用的 SRVPGM。好吧,只是他们的程序...
但是我在 CRTSQLRPGI 命令中找不到任何类似的选项。
Nor in opt codes in ctl-opt sentence (We have BNDDIR, but not BNDSRVPGM option).
有什么想法吗?
我是 运行 V7R3M0,TR 等级:6
提前致谢!
使用
bnddir('SNI_BNDDIR')
是引用绑定还是拷贝绑定的方式
关键是你的BNDDIR长什么样子?
如果你想通过引用绑定,那么它应该包括*SRVPGM对象。
如果你想通过复制绑定,那么它应该包含*MODULE对象。
通常,您希望每个 *SRVPGM 都有一个 *BNDDIR,其中包含构建特定 *SRVPGM 所需的模块(可能还有一个或两个实用程序 *SRVPGM)。
然后是一个或多个 *BNDDIR,其中仅包含 *SRVPGM 对象,用于构建使用这些 *SRVPGM 的程序。
我一直在尝试解决这个问题,但是。我找不到它。
我想做的是使用“按引用绑定”功能,但使用嵌入式 sql.
编写的 ILE RPG我可以在源代码中使用 BNDDIR ctl opt。一切正常。 但这意味着“通过复制绑定”方法。检查删除 SRVPGM 甚至 BINDDIR。并且调用程序仍然有效。
那么,有什么方法可以在 ILERPGSQL 程序中使用“按引用绑定”吗?
在我的问题之后,举个例子:
程序SNILOG是一个模块,包含几个程序。其中一部分,出口。 在 QSRVSRC 中,我设置了导出的程序,源程序同名:SNILOG。像这样:
STRPGMEXP PGMLVL(*CURRENT)
/************************************************** ******************/
/* *MODULE SNILOG INIGREDI 04/10/21 15:25:30 */
/************************************************** ******************/
EXPORT SYMBOL("GETDIAG_TOSTRING")
EXPORT SYMBOL("GETDIAGNOSTICS")
EXPORT SYMBOL("GRABAR_LOG")
EXPORT SYMBOL("SNILOG")
ENDPGMEXP
由于部分程序是用嵌入式编程的sql,编译必须用CRTSQLRPGI,使用参数OBJTYPE(*SRVPGM)。 所以,我终于得到了一个名为 SNILOG 的 SRVPGM,其中导出了这 4 个程序。
获得 SRVPGM 后,我将其添加到名为 SNI_BNDDIR 的 BNDDIR。
好了,我们进入主叫程序:SNI600V。 定义为
dftactgrp(*no)
,当然! 并使用 CRTSQLRPGI 和参数 OBJTYPE(*PGM).
编译在这里,如果我使用控制规范
bnddir('SNI_BNDDIR')
,效果很好。 但还不够好,因为这是一种“通过复制绑定”的方法(我可以删除 SRVPGM 或 BNDDIR,它仍然可以正常工作)。
当我不使用 SQL 时,我可以使用 CRTPGM 命令,我可以设置 BNDSRVPGM 参数,以设置程序将要调用的 SRVPGM。好吧,只是他们的程序... 但是我在 CRTSQLRPGI 命令中找不到任何类似的选项。 Nor in opt codes in ctl-opt sentence (We have BNDDIR, but not BNDSRVPGM option).
有什么想法吗?
我是 运行 V7R3M0,TR 等级:6
提前致谢!
使用
bnddir('SNI_BNDDIR')
是引用绑定还是拷贝绑定的方式
关键是你的BNDDIR长什么样子?
如果你想通过引用绑定,那么它应该包括*SRVPGM对象。
如果你想通过复制绑定,那么它应该包含*MODULE对象。
通常,您希望每个 *SRVPGM 都有一个 *BNDDIR,其中包含构建特定 *SRVPGM 所需的模块(可能还有一个或两个实用程序 *SRVPGM)。
然后是一个或多个 *BNDDIR,其中仅包含 *SRVPGM 对象,用于构建使用这些 *SRVPGM 的程序。