web-dev-qa-db-fra.com

PL/SQL: Erreur "PLS-00306: un nombre incorrect ou des types d'arguments dans l'appel de" déclenché pour la table de nombres

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

8
Alin

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
9
Nick Krasnov

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;
0
mucio

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));
0
Andrew Cruickshank