外部过程和函数的可变长度参数列表

要确定传递到 ILE 服务程序的参数数目,以 ILE RPG 编写的外部过程和函数可以使用 %PARMS 内置函数,所有 ILE 语言都可以使用 ILE _NPMPARMLISTADDR 内置函数。

当编写 ILE 服务程序中的过程以接受可变数量的输入参数时,调用该程序的 SQL 过程和函数会设置操作描述符以指示参数计数。 ILE 服务程序可依赖此数字来确定参数计数。

在以下示例中,定义了两个 SQL 函数以在 RPG 服务程序中使用相同的入口点名称,每个入口点都传递不同数目的参数。 可以从许多其他 ILE 程序调用此同一服务程序。 ILE RPG %PARMS 内置函数用于确定传递的参数数。

为了避免需要其他 SQL 参数,建议在例程定义上使用 PARAMETER STYLE GENERAL。
CREATE FUNCTION RFUNC1 (P1 CHAR(5))
    RETURNS INT
    LANGUAGE RPGLE
    PARAMETER STYLE GENERAL
    EXTERNAL NAME 'TSTLIB/TSTSRVPGM(RPGPGM1)';

CREATE FUNCTION RFUNC2 (P1 CHAR(5),
                        P2 CHAR(10))
    RETURNS INT
    LANGUAGE RPGLE
    PARAMETER STYLE GENERAL
    EXTERNAL NAME 'TSTLIB/TSTSRVPGM(RPGPGM1)';
在 RPG 代码中,可以使用 %PARMS 内置函数来获取参数数量。
DCL-PROC RPGPGM1 EXPORT;
DCL-PI *N INT(10);
 P1 CHAR(5)  CONST OPTIONS(*NOPASS);
 P2 CHAR(10) CONST OPTIONS(*NOPASS);
END-PI;
  DCL-S nbr INT(10);
  DCL-S result INT(10);
  nbr = %PARMS;
  // logic can use the number of parameters to determine how to calculate the result
  RETURN result;
END-PROC;

对于其他 ILE 语言,可使用 _NPMPARMLISTADDR 内置函数来获取此信息。