外部过程和函数的可变长度参数列表
要确定传递到 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 内置函数来获取此信息。