规范中声明的 PL-SQL 类型与正文过程的参数不兼容



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

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!

所以,那里没有问题。如果上述测试用例不能准确代表您的情况,我建议您编辑您的问题以包含演示您的问题的完整测试用例,以便我们有更好的机会诊断问题。

最新更新