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 的程序。