Oracle 规范中声明的PL-SQL类型与主体过程的参数不兼容

Oracle 规范中声明的PL-SQL类型与主体过程的参数不兼容,oracle,plsql,Oracle,Plsql,我在我的包规范中定义了此类型: 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 NU

我在我的包规范中定义了此类型:

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:调用中的参数数量或类型错误 “过滤器和B”行: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!

所以,没有问题。如果上面的测试用例不能准确地反映您的情况,我建议您编辑您的问题,以包含一个完整的测试用例来演示您的问题,这样我们就有更好的机会诊断问题。

什么是
I_FILTER
的数据类型?另外,包含对FilterAndB的调用的过程是否与FilterAndB在同一个包体中?
NUMBER
,我很确定不是
I\u FILTER
问题是将
v\u numlist
作为参数从块发送到过程我已经编辑了我的答案以包含您的建议,但仍然没有遇到任何问题。可以看到,在调用test.test2过程的匿名块中,我将v_numlist变量声明为test.numlist数据类型。这是因为这就是test.test2所期望的数据类型。是的,我犯了一个愚蠢的错误,在过程定义中调用了过程参数
pita\u initial\u gservices
,对不起,谢谢