programing

PL/SQL: 오류 "PLS-00306: 잘못된 번호 또는 호출 중인 인수 유형"이 번호 테이블에 대해 트리거되었습니다.

elecom 2023. 10. 20. 13:26
반응형

PL/SQL: 오류 "PLS-00306: 잘못된 번호 또는 호출 중인 인수 유형"이 번호 테이블에 대해 트리거되었습니다.

정확한 절차 서명을 사용하여 API를 호출하려고 하는데, 어쩐지 번호표가 제대로 인식되지 않는 것 같습니다.

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 호출:

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'에 호출하는 인수 유형이 잘못되었습니다.

왜 그런지 추측이라도?감사해요.

당신이 마주하고 있는 이유는.PLS-00306오류는 다음과 호환되지 않습니다.NUMLIST패키지 규격에 정의된 수집 유형 및NUMLIST익명 PL/SQL 블록에 정의된 컬렉션 유형입니다.두 컬렉션 유형의 정의가 동일하더라도 호환되지 않습니다.익명의 PL/SQL 블록에서 선언을 하고 그 다음에 전달해야 합니다.GETSERVICES_API변수를 처리하다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

형식 정의가 올바르지 않은 것 같습니다.테이블 'type'을 만들려면 다음과 같은 것이 필요합니다.

CREATE OR REPLACE TYPE NUMLIST AS OBJECT (COLUMN1 VARCHAR2(50));

아마도 당신은 이것을 시도해 볼 수 있을 것입니다.

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;

PLS-00306 오류도 있었는데 원인이 달랐습니다.저 같은 경우에는 논쟁의 이름을 잘못 사용하고 있었습니다.절차가 있습니다.FUNCTION get_card_list(p_clob_in IN CLOB, o_clob_out OUT CLOB)

인수 이름은 p_clob_ino_clob_out이므로 다음과 같이 절차를 호출해야 합니다.get_card_list(p_clob_in=>inner, o_clob_out=>outer)아니면get_card_list(inner, outer), p_xml & o_xml 인수 이름을 잘못 사용했습니다.get_card_list(p_xml=>inner, o_xml=>outer)

이 YT 비디오는 많은 도움이 됩니다. https://www.youtube.com/watch?v=xwMVL3Z_vn8

언급URL : https://stackoverflow.com/questions/19543343/pl-sql-error-pls-00306-wrong-number-or-types-of-arguments-in-call-to-trigger

반응형