oracle - PL/SQL : Error "PLS-00306: wrong number or types of arguments in call to" triggered for table of numbers

标签 oracle plsql

我正在尝试使用确切的过程签名调用 API,但不知何故,我认为数字表无法正确识别。

API定义:

TYPE NUMLIST IS TABLE OF NUMBER INDEX BY VARCHAR2(50);

PROCEDURE GETSERVICES_API
(
   I_DIMOBJID IN NUMBER, I_OBJECTID IN NUMBER, I_FILTER IN NUMBER, 
   O_ERRORCODE OUT NUMBER, O_ERRORTEXT OUT VARCHAR2, O_SERVICELIST OUT NUMLIST
);

我对 API 的调用:
DECLARE

   TYPE NUMLIST IS TABLE OF NUMBER INDEX BY VARCHAR2(50);
   lt_SERVICELIST              NUMLIST;

   ls_errortext             varchar2(100);
   ln_errorcode             number;

BEGIN


    PKGCOMSUPPORT_SERVICE.GETSERVICES_API(I_DIMOBJID => 6,
                                          I_OBJECTID => 5263,
                                          I_FILTER => 3,
                                          O_ERRORCODE => ln_errorcode,
                                          O_ERRORTEXT => ls_errortext,
                                          O_SERVICELIST => lt_SERVICELIST);

END;

当我运行 API 调用时,我得到:PLS-00306:调用 'GETSERVICE_API 时参数类型的数量错误

知道为什么吗?谢谢

最佳答案

您面临的原因PLS-00306错误是 NUMLIST 不兼容集合类型,在包规范和 NUMLIST 中定义在匿名 PL/SQL 块中定义的集合类型。尽管这两种集合类型的定义相同,但它们并不兼容。在您的匿名 PL/SQL 块中,您必须声明然后传入 GETSERVICES_API过程变量PKGCOMSUPPORT_SERVICE.NUMLIST数据类型。

create or replace package PKG as
  type t_numlist is table of number index by varchar2(50);
  procedure SomeProc(p_var in pkg.t_numlist);
end;
/

create or replace package body PKG as
  procedure someproc(p_var in pkg.t_numlist) is
  begin
    null;
  end;
end;
/

declare
  type t_numlist is table of number index by varchar2(50);
  l_var t_numlist;
begin
  pkg.someproc(l_var);
end;

ORA-06550: line 5, column 3:
PLS-00306: wrong number or types of arguments in call to 'SOMEPROC'

declare
  --type t_numlist is table of number index by varchar2(50);
  l_var pkg.t_numlist;
begin
  pkg.someproc(l_var);
end;

anonymous block completed

关于oracle - PL/SQL : Error "PLS-00306: wrong number or types of arguments in call to" triggered for table of numbers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19543343/

相关文章:

sql - 插入语句试图包含重复键

sql - 如何在不使用子查询的情况下仅选择具有最大序列的行?

Oracle:在没有数据库链接的情况下在两个数据库之间传输数据

sql - PL/SQL 性能优化 - 计算记录更改的总和与差值

oracle - PL/SQL - 检查内存泄漏?

sql - 并排显示联合数据而不重复

java - 如何使用 JPA 或 JDBC 通过 REF CURSOR 调用 PL/SQL 函数

sql - 在 SQL 查询中插入日志语句

sql - 从 oracle 数据库表中生成带有自定义 XML 标记的 XML 文件

sql - PL/SQL FETCH NEXT 或 rownum