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_in 및 o_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
'programing' 카테고리의 다른 글
| PHP에서 이중 콜론 연산자와 화살표 연산자의 차이점은? (0) | 2023.10.20 |
|---|---|
| strcat() 전에 strcpy()를 먼저 해야 하는 이유는 무엇입니까? (0) | 2023.10.20 |
| C++ 프로젝트에서 C 소스 파일을 어떻게 사용합니까? (0) | 2023.10.20 |
| 이미 가져온 모듈 편집 (0) | 2023.10.20 |
| jQuery/JavaScript 충돌 탐지 (0) | 2023.10.20 |