'PLS-00306: 호출 시 인수의 갯수나 유형이 잘못되었습니다' 오류가 발생하였나요? 해결해 보도록 합시다. 😘
오라클 PL/SQL에서 발생하는 오류는 PLS라는 접두어와 함께 코드를 표시해드립니다. 이번 게시물에서는 'PLS-00306' 오류가 발생하는 예제를 살펴보고 어떻게 해결할 수 있는지 해결 방법에 대해 알아보도록 하겠습니다.
아래의 예시에서는 프로시저를 호출할 때 인수의 갯수와 유형이 일치하지 않아 오류가 발생하는 상황을 보여드립니다. 우선 매개변수를 2개로 하는 프로시저를 하나 만들어보겠습니다.
-- 프로시저 생성
CREATE OR REPLACE PROCEDURE PROCEDURE_NAME (P_PARAM1 NUMBER,
P_PARAM2 VARCHAR2)
AS
BEGIN
DBMS_OUTPUT.PUT_LINE ('Parameter 1: ' || P_PARAM1);
DBMS_OUTPUT.PUT_LINE ('Parameter 2: ' || P_PARAM2);
END;
/
PLS-00306: 호출 시 인수의 갯수나 유형이 잘못되었습니다
이제 위에서 생성한 예제 프로시저를 호출해 보겠습니다. 특이사항으로 프로시저의 매개변수를 2개가 아닌 1개로 호출해 보겠습니다.
-- 잘못된 인수 갯수로 호출
BEGIN
--PLS-00306: wrong number or types of arguments in call to 'PROCEDURE_NAME'
PROCEDURE_NAME(10);
END;
위의 코드에서 PROCEDURE_NAME 프로시저는 두 개의 인수를 받아서 출력하는 간단한 역할을 합니다. 하지만 마지막 블록에서 프로시저를 호출할 때 인수를 하나만 전달하였습니다. 이로 인해 인수의 갯수가 맞지 않기 때문에 ORA-06550 오류가 발생합니다. 오류 메시지는 대략 다음과 같을 것입니다.
ORA-06550: line 3, column 3:
PLS-00306: wrong number or types of arguments in call to 'PROCEDURE_NAME'
ORA-06550: line 3, column 3:
PL/SQL: Statement ignored
'PLS-00306' 오류는 프로시저를 호출할 때 전달되는 인수의 갯수나 데이터 유형이 프로시저 선언과 일치하지 않을 때 발생하기 때문에, 인수의 개수를 확인하고 수정하여 해결할 수 있습니다.
PLS-00306: wrong number or types of arguments in call to
'PLS-00306' 오류는 호출하려는 프로시저 또는 펑션의 매개변수 개수, 타입, 명칭 등이 달라서 발생하는 경우가 많습니다.
해당 예제를 살펴보겠습니다.
우선 매우 단순한 프로시저를 만들어 보았습니다.
패키지 스펙
CREATE OR REPLACE PACKAGE USER_NAME.PACKAGE_NAME IS
PROCEDURE PROCEDURE_NAME(PARAM_NAME IN VARCHAR2);
END;
/
패키지 바디
CREATE OR REPLACE PACKAGE BODY USER_NAME.PACKAGE_NAME
IS
PROCEDURE PROCEDURE_NAME (PARAM_NAME IN VARCHAR2)
IS
BEGIN
DBMS_OUTPUT.PUT_LINE (PARAM_NAME);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE (SQLERRM);
END;
END;
/
목적
이 패키지는 사용자가 지정한 문자열을 받아들이고, 그것을 출력하는 단순한 기능을 제공합니다. 예외가 발생할 경우, SQLERRM 함수를 사용하여 오류를 출력하겠습니다.
- 패키지: PACKAGE_NAME 패키지는 PROCEDURE_NAME이라는 프로시저를 정의합니다. 이 프로시저는 PARAM_NAME이라는 VARCHAR2 타입의 매개 변수를 입력 받을 것입니다.
- 패키지 바디: PROCEDURE_NAME 프로시저는 입력된 PARAM_NAME을 받아서 DBMS_OUTPUT.PUT_LINE 함수를 사용하여 출력합니다. 또한, EXCEPTION 에서는 WHEN OTHERS로 모든 예외를 처리하며, 예외가 발생한 경우 SQLERRM를 출력합니다.
PLS-00306 해결 방법
이번에 안내해드리는 오류, 'PLS-00306: wrong number or types of arguments in call to'는 호출한 프로시저에 대한 매개 변수의 수나 유형이 올바르지 않을 때 발생합니다. 다음과 같이 주어진 코드를 살펴보고, 오류의 원인과 해결에 대해 알아보겠습니다.
호출 코드
BEGIN
PACKAGE_NAME.PROCEDURE_NAME (WRONG_PARAM_NAME => :PARAM_NAME);
END;
/
ERROR at line 2:
ORA-06550: line 2, column 4:
PLS-00306: wrong number or types of arguments in call to 'PROCEDURE_NAME'
ORA-06550: line 2, column 4:
PL/SQL: Statement ignored
위의 코드는 PROCEDURE_NAME 프로시저를 호출하고 있습니다. 그러나 패키지에서 정의된 매개 변수 이름은 PARAM_NAME인데, 해당 코드에서는 WRONG_PARAM_NAME이라는 이름으로 지정하였습니다. 이것이 오류의 원인입니다. 오류 원인은 여러가지일 수 있는데, 생각나는 코드를 만들어본 것이니, 여러분에게 발생한 코드는 이와 다를 수 있다는 점, 유념해 주세요.
해결 방법
호출 코드에서 사용하는 매개 변수 이름을 패키지에서 정의한 이름과 일치하도록 수정합니다. 따라서 올바른 코드는 다음과 같이 수정합니다.
BEGIN
PACKAGE_NAME.PROCEDURE_NAME (PARAM_NAME => :PARAM_NAME);
END;
/
PL/SQL procedure successfully completed.
이렇게 하면 프로시저에 정의된 매개 변수 이름과 호출 코드에서 사용된 이름이 일치하게 되어 'PLS-00306: 호출 시 인수의 갯수나 유형이 잘못되었습니다' 오류를 해결할 수 있습니다.
이번 예제에서는 다루지 않았는데, 매개변수의 개수의 차이로 인하여 발생하는 경우도 있으니, 개수가 맞는지 추가적으로 확인해 주세요. 오히려 이러한 경우가 더 많습니다. 예제 선정을 잘못한 것 같은데 이미 작성을 해버려서... 이것으로 마무리 하겠습니다. 이 부분은 필요 시에 추가로 작성하겠습니다.