oracle – PL / SQL:错误“PLS-00306:调用的参数的数量或类型错误”触发了数字表

前端之家收集整理的这篇文章主要介绍了oracle – PL / SQL:错误“PLS-00306:调用的参数的数量或类型错误”触发了数字表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用精确的过程签名来调用API,但不知何故,我认为不能正确识别的数字表.

API定义:

  1. TYPE NUMLIST IS TABLE OF NUMBER INDEX BY VARCHAR2(50);
  2.  
  3. PROCEDURE GETSERVICES_API
  4. (
  5. I_DIMOBJID IN NUMBER,I_OBJECTID IN NUMBER,I_FILTER IN NUMBER,O_ERRORCODE OUT NUMBER,O_ERRORTEXT OUT VARCHAR2,O_SERVICELIST OUT NUMLIST
  6. );

我对API的要求:

  1. DECLARE
  2.  
  3. TYPE NUMLIST IS TABLE OF NUMBER INDEX BY VARCHAR2(50);
  4. lt_SERVICELIST NUMLIST;
  5.  
  6. ls_errortext varchar2(100);
  7. ln_errorcode number;
  8.  
  9. BEGIN
  10.  
  11.  
  12. 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);
  13.  
  14. END;

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

知道为什么吗?谢谢

您遇到PLS-00306错误的原因是NUMLIST集合类型不兼容,NUMLIST集合类型在包规范中定义,在匿名PL / sql块中定义的NUMLIST集合类型.即使这两种集合类型的定义相同,它们也是不兼容的.在您的匿名PL / sql块中,您必须声明然后将PKGCOMSUPPORT_SERVICE.NUMLIST数据类型的变量传递给GETSERVICES_API过程.
  1. create or replace package PKG as
  2. type t_numlist is table of number index by varchar2(50);
  3. procedure SomeProc(p_var in pkg.t_numlist);
  4. end;
  5. /
  6.  
  7. create or replace package body PKG as
  8. procedure someproc(p_var in pkg.t_numlist) is
  9. begin
  10. null;
  11. end;
  12. end;
  13. /
  14.  
  15. declare
  16. type t_numlist is table of number index by varchar2(50);
  17. l_var t_numlist;
  18. begin
  19. pkg.someproc(l_var);
  20. end;
  21.  
  22. ORA-06550: line 5,column 3:
  23. PLS-00306: wrong number or types of arguments in call to 'SOMEPROC'
  24.  
  25. declare
  26. --type t_numlist is table of number index by varchar2(50);
  27. l_var pkg.t_numlist;
  28. begin
  29. pkg.someproc(l_var);
  30. end;
  31.  
  32. anonymous block completed

猜你在找的Oracle相关文章