J'essaie d'appeler une API en utilisant la signature de procédure exacte, mais d'une manière ou d'une autre, la table des nombres que je ne pense pas est reconnue correctement.
Définition de l'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
);
Mon appel d'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;
Lorsque j'ai lancé mon appel d'API, j'ai obtenu: PLS-00306: nombre incorrect de types d'arguments dans l'appel à 'GETSERVICE_API
Une idée pourquoi? Merci
La raison pour laquelle vous faites face à l'erreur PLS-00306
est l'incompatibilité du type de collection NUMLIST
, défini dans la spécification du package et du type de collection NUMLIST
défini dans le bloc PL/SQL anonyme. Même si les définitions de ces deux types de collection sont identiques, elles ne sont pas compatibles. Dans votre bloc PL/SQL anonyme, vous devez déclarer puis transmettre à la procédure GETSERVICES_API
une variable de type 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
peut-être que vous pouvez essayer ceci:
CREATE TYPE NUMLIST AS TABLE OF NUMBER INDEX BY VARCHAR2(50);
DECLARE
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;
Je pense que la définition du type est invalide. Pour créer un type de table, vous avez besoin de quelque chose comme:
CREATE OR REPLACE TYPE NUMLIST AS OBJECT (COLUMN1 VARCHAR2(50));