PL/SQL: ORA-04044: procedure, function, package, or type is not allowed here

ORA-04044: 프로시저, 함수, 패키지 또는 유형이 이곳에서 허용되지 않습니다.

해당 오류는 객체를 허용되지 않는 위치에서 호출할 때 발생해요. 대부분 SQL 영역과 PL/SQL 실행 블록의 구분을 정확히 하지 않아 생기는 경우가 많습니다.

프로시저를 SQL 문에서 호출한 경우 🔎

프로시저는 반환값이 없기 때문에 SELECT 문에서 사용할 수 없습니다.

❌ 잘못된 예

SELECT 프로시저명() FROM dual;

✅ 해결 방법

BEGIN
   프로시저명();
END;
/

반환값이 없는 객체를 함수처럼 사용한 경우 🔎

❌ 잘못된 예

v_result := 프로시저명();

✅ 해결 방법
반환값이 필요하다면 함수로 작성합니다.

패키지 내부 프로시저를 SQL에서 호출한 경우 🔎

패키지에 포함된 프로시저 역시 SQL 문에서는 사용할 수 없습니다.
반드시 BEGIN ~ END 블록에서 호출해야 합니다.

✅ 정리

구분사용 가능
SQL 문함수
PL/SQL 블록함수, 프로시저

핵심은 간단합니다.

  • 값이 필요하면 '함수'
  • 단순 실행이면 '프로시저' (out 파라미터를 통해 함수와 비슷하게 사용하는 것도 가능)
  • 프로시저는 SQL에서 직접 호출 불가

SQL과 PL/SQL의 사용 영역을 구분하면 ORA-04044 오류는 대부분 해결할 수 있을 거예요.

이전최근
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗