본문 바로가기

개발/오라클

오라클 - SQLGate2010 으로 function (펑션) 생성 시 주의, ORA-06575 : 패키지 또는 함수 ~ 은 부적당한 상태입니다.

오늘도 열심히 공부를 위해 뭔가를 해볼까 하다가 오늘은 펑션을 해봐야겠다는 생각이 들었다.

나는 PL/SQL 이 너무나도 약한 그런 남자니까...


그래서 지난주 했던 order by decode 에서 사용했던 select 문에 적용할 날짜 펑션을 만들어보기로 했다.

CREATE OR REPLACE FUNCTION FN_GET_DATE_FORMAT (I_STR VARCHAR2) RETURN VARCHAR2 
IS 
    V_DATE VARCHAR2(10); 
BEGIN 
    IF(LENGTH(I_STR) = 8) THEN 
        SELECT TO_CHAR(TO_DATE(I_STR, 'YYYYMMDD'), 'YYYY.MM.DD') 
          INTO V_DATE 
          FROM DUAL; 
    END IF;  
    
    IF(LENGTH(I_STR) = 14) THEN 
        SELECT TO_CHAR(TO_DATE(I_STR, 'YYYYMMDDHH24MISS'), 'YYYY.MM.DD') 
          INTO V_DATE 
          FROM DUAL; 
    END IF;   
    
    RETURN V_DATE; 
EXCEPTION 
WHEN OTHERS THEN 
    RETURN '날짜 형식으로 변환할 수 없는 데이터입니다.'; 
END;  

그런데 펑션의 생성을 위해 f5 를 누르면 결과창에는 분명히 '함수가 생성되었습니다.' 라고 나오는데

펑션의 스크립트를 보기 위해 f4 를 누르면 펑션이 정의되지 않았다고 나온다.


그리고 펑션을 사용하기 위해 쿼리에 펑션을 넣고 사용해봤더니 이번에는 에러 메세지가 나온다.

Caused by: java.sql.SQLException: ORA-06575: 패키지 또는 함수 FN_GET_DATE_FORMAT 은 부적당한 상태입니다.


이게 도대체 뭘까?

찾아보니 해당 에러 메세지는 펑션 생성시 제대로 컴파일이 되지 않았을 때 발생하는 에러라고 한다.

아니, 분명히 제대로 생성 되었다고 나오는 걸 결과창에서 확인 했는데?


그래서 혹시 몰라 다른 PL/SQL 생성 예제라고 되어 있는 소스를 인터넷 상에서 찾아와 생성해봤다.

내가 작성한 PL/SQL 은 에러겠지만 이건 아니겠지... 하는 마음으로.

그런데 마찬가지로 동일한 에러가 발생이 되는 것이었다.


뭘까뭘까 끙끙 앓다가 혹시나 해서 새로운 편집기를 생성할 때 PL/SQL 편집기로 새 창을 띄우고 해봤다.

아주 잘 된다. -_- 망할.


2018-03-17 FN_GET_DATE_FORMAT.sql