rpgle(sqlrpgle) 中编译器指令 /Include 和 /copy 之间的区别

Kun*_*oy 2 rpg rpgle ibm-midrange

在 rpgle /sqlrpgle 代码中,我遇到了 /INCLUDE 和 /COPY 等编译器指令,有人可以告诉我两者之间的核心区别是什么,因为它们似乎几乎做了同样的事情。

nfg*_*fgl 6

它们的不同之处在于 CRTSQLRPGI 的 RPGPPPOT 参数应用于它们的处理方式。查看文档

当值为*LVL1时,将调用RPG预处理器对RPG源进行预处理。所有 /COPY 语句都将被扩展,甚至嵌套的 /COPY 语句,并且条件编译指令将被处理。

当值为*LVL2时,将调用RPG预处理器对RPG源进行预处理。所有 /COPY 和 /INCLUDE 语句都会被扩展,并且条件编译指令将被处理。

如果您的 SQL 语句之一引用了在另一个成员中定义的主变量,或者像另一个成员中的变量一样定义,则可以对该成员使用 /COPY,对于其他成员使用 /INCLUDE,并使用 RPGPPOPT(*LVL1) 进行编译。这样,预处理器将了解该变量,而不必读取对其无用的 /INCLUDE 成员。

  • ILE RPG 编译器的文档还解释了这些指令对于编译器来说是相同的,但对于 SQL 预编译器来说是不同的:https://www.ibm.com/docs/en/i/7.4?topic=directives-copy-include和 https://www.ibm.com/docs/en/i/7.4?topic=ci-using-copy-include-in-source-files-embedded-sql (2认同)