PL/SQL에서 'PLS-00302: 구성 요소가 정의되어야 합니다' 오류가 발생하였습니다. 해당 오류는 주로 정의(선언)되지 않은 프로시저나 함수를 호출하려고 할 때 발생한답니다.
참고로 '정의하다'는 'define', '선언하다'는 'declare'라는 단어를 일반적으로 사용하므로, '구성 요소가 정의되어야 한다' 보다는 '구성 요소가 선언되어야 한다'는 표현이 더 적합해 보이는 오류입니다. (오라클 예외를 보면 해석이 적합하지 않는 부분이 자주 보인답니다.)
PLS-00302: 구성 요소가 정의되어야 합니다
이 문제를 해결하는 데 도움이 되는 몇 가지 원인과 해결 방법을 준비해 보았는데요, 보통 안내해드리는 첫 번째 방법으로 해결할 수 있으리라 기대합니다. 다음은 이번 예제에서 사용할 패키지와 프로시저 호출 문이며, 특이사항은 다음과 같습니다~
- 패키지 이름은 PACKAGE_NAME 입니다.
- 패키지 구성 요소는 프로시저 PROCEDURE_NAME 하나만 있습니다.
CREATE OR REPLACE PACKAGE USER_NAME.PACKAGE_NAME IS
PROCEDURE PROCEDURE_NAME;
END;
/
프로시저 또는 함수 선언 확인
먼저, 오류 메시지에서 언급된 'UNDECLARED_PROCEDURE_NAME'과 관련한 프로시저 또는 함수가 정의(선언)되었는지 확인해 주십시오. 프로시저 또는 함수가 존재하지 않으면, 다음과 같은 문제일 것입니다.
- 프로시저, 펑션의 누락에 의한 문제로 스키마 작업이 필요한 사항 (패키지 프로그램을 판매하는 경우, 간혹 데이터베이스 담당자의 실수로 데이터베이스 일부 객체가 누락되는 경우가 있습니다.)
- 호출하려는 프로시저 또는 함수의 오타, 스키마 착오 입력
선언이 되어 있는지 확인하고 필요한 경우, 생성하십시오. 또는 호출하려는 구성요소의 이름을 한 번 더 확인합니다.
특히 해당 예제는 의도적으로 해당 프로시저를 선언하지 않았으며, 의도적으로 오류를 발생시킨 예제랍니다.
EXEC PACKAGE_NAME.UNDECLARED_PROCEDURE_NAME;
BEGIN PACKAGE_NAME.UNDECLARED_PROCEDURE_NAME; END;
ERROR at line 1:
ORA-06550: line 1, column 1:
PLS-00302: component 'UNDECLARED_PROCEDURE_NAME' must be declared
ORA-06550: line 1, column 1:
PL/SQL: Statement ignored
네임스페이스 및 접근 권한 확인
프로시저 또는 함수가 다른 스키마나 패키지에 속해 있다면, 적절한 네임스페이스나 패키지에 접근할 수 있는 권한이 있는지 확인해 주십시오. 이 부분은 프로시저, 함수 선언 확인 부분에서 안내해드린 내용 중 일부랍니다.
컴파일 오류 확인
코드를 컴파일할 때 다른 오류가 발생하지 않았는지 확인하십시오. 다른 오류가 발생한 경우 해당 오류를 해결하고 다시 시도하여 해결할 수도 있습니다.
호출 문장 확인
프로시저 또는 함수를 호출하는 부분을 검토하여 올바른 매개변수를 사용했는지, 그리고 호출하는 위치에서 프로시저나 함수에 접근할 수 있는지 확인하셔야 합니다.
PL/SQL 블록 문법 확인
PL/SQL 블록의 문법을 재검토하여 세미콜론, 괄호 및 예약어가 올바르게 사용되었는지 확인하십시오.