问题描述
我正在尝试使用确切的过程签名调用 API,但不知何故,我认为数字表无法正确识别.
I'm trying to call an API using the exact procedure signature, but somehow the table of numbers I don't think is recognize correctly.
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 的调用:
My call of 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"时参数类型的数量错误
When I run my call of API I got: PLS-00306: wrong number of types of arguments in call to 'GETSERVICE_API
知道为什么吗?谢谢
推荐答案
您面临 PLS-00306
错误的原因是 NUMLIST
集合类型不兼容,已定义在匿名 PL/SQL 块中定义的包规范和 NUMLIST
集合类型中.尽管这两种集合类型的定义相同,但它们并不兼容.在您的匿名 PL/SQL 块中,您必须声明一个 PKGCOMSUPPORT_SERVICE.NUMLIST
数据类型的变量,然后将其传递给 GETSERVICES_API
过程.
The reason why you are facing the PLS-00306
error is incompatibility of NUMLIST
collection type, defined in the package specification and NUMLIST
collection type defined in the anonymous PL/SQL block. Even though definitions of those two collection types are the same, they are not compatible. In your anonymous PL/SQL block you have to declare and then pass into the GETSERVICES_API
procedure a variable of PKGCOMSUPPORT_SERVICE.NUMLIST
data type.
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
这篇关于PL/SQL:错误“PLS-00306:调用中的参数数量或类型错误"为数字表触发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!