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 오류는 대부분 해결할 수 있을 거예요.
