Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

oracle

plsql

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 definition:

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
);

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;

When I run my call of API I got: PLS-00306: wrong number of types of arguments in call to 'GETSERVICE_API

Any idea why? Thanks

like image 963
Alin Avatar asked Oct 23 '13 13:10

Alin


1 Answers

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
like image 61
Nick Krasnov Avatar answered Oct 22 '22 19:10

Nick Krasnov