我的包规范中定义了这种类型:
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;
由于某些不兼容性,请查看this线程,所以
liota_initial_gservices pkgcomsupport_service.NUMLIST;
声明如下,并且过程声明中的参数的类型为
pkgcomsupport_service.NUMLIST;
但仍然是同样的错误。
答案 0 :(得分:3)
从你所说的,我没有看到问题。但是,你的解释不是很清楚 - 如果你能够生成一个再现你所得到的错误的示例包(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!
所以,没有问题。如果上述测试用例并不能准确反映您的情况,建议您编辑问题以包含一个完整的测试用例,以便我们更好地诊断问题。