我在软件包规范中定义了此类型:
TYPE NUMLIST IS TABLE OF NUMBER INDEX BY VARCHAR2(50);
以及规范中定义的全局变量:
G_SERVICES NUMLIST;
我想在我的身体中调用具有此定义的过程:
PROCEDURE filterAandB( pin_filter_type IN NUMBER
, piota_initial_gservices IN OUT NUMLIST)
喜欢这个:
filterAandB( pin_filter_type => I_FILTER
, pita_initial_gservices => liota_initial_gservices);
需要提到的是,该过程是私有的,因此定义在正文中
PROCEDURE filterAandB( pin_filter_type IN NUMBER
, piota_initial_gservices IN OUT NUMLIST);
我得到了
错误:PLS-00306:调用中的参数数量或类型错误 "FILTERAANDB"行:2731
我也试图将其称为块,但仍然出现相同的错误。
查看类似的问题,我发现您需要将参数的类型声明为
pkgcomsupport_service.NUMLIST;
由于一些不兼容,看看这个线程,所以
liota_initial_gservices pkgcomsupport_service.NUMLIST;
像这样声明,并且过程声明中的参数也是类型
pkgcomsupport_service.NUMLIST;
但仍然是相同的错误。
从你所说的,我没有看到问题。但是,您的解释不是很清楚 - 如果您可以生成一个示例包(spec + body)来重现您遇到的错误,那将更有帮助。
这是我敲出的一个包,试图模仿你所描述的内容:
create or replace package test as
TYPE NUMLIST IS TABLE OF NUMBER INDEX BY VARCHAR2(50);
G_SERVICES NUMLIST;
PROCEDURE test2(in_numlist numlist);
END TEST;
/
CREATE OR REPLACE PACKAGE BODY TEST AS
PROCEDURE test1 (in_number NUMBER,
in_numlist numlist)
IS
BEGIN
dbms_output.put_line('this works!');
END;
PROCEDURE test2(in_numlist numlist)
IS
v_num NUMBER := 1;
BEGIN
test1(v_num, in_numlist);
END;
END TEST;
/
为了调用它,我运行以下命令:
DECLARE
v_numlist test.numlist;
BEGIN
test.test2(v_numlist);
END;
/
这是我得到的输出:
this works!
所以,那里没有问题。如果上述测试用例不能准确代表您的情况,我建议您编辑您的问题以包含演示您的问题的完整测试用例,以便我们有更好的机会诊断问题。