[오류 해결] ### Error querying database. Cause: java.sql.SQLDataException: ORA-01861: literal does not match format string
로컬에서는 잘 돌았던 쿼리가
운영 환경에 올리니 다음과 같은 에러가 발생했다.
(보안 상, 중요 정보는 삭제함.)
### Error querying database. Cause: java.sql.SQLDataException: ORA-01861: literal does not match format string ### The error may exist in ServletContext resource [/META-INF/mybatis/sal/duty/*] ### The error may involve * Inline ### The error occurred while setting parameters ### SQL: /* [*] */
SELECT
...
(TO_DATE(?)-TO_DATE(?)+1) / MAX(BB. BRCH_CNT) * 100,1) AS WRITE_RATIO,
...
문제가 발생한 쿼리는 바로 이 부분이다.
(TO_DATE(?)-TO_DATE(?)+1) / MAX(BB. BRCH_CNT) * 100,1) AS WRITE_RATIO,
1. 원인
TO_DATE 함수 사용 시, 날짜 형식을 표기하지 않아서.
ex) TO_DATE('2020-03-31')
이와 같이 입력한 경우, 코드 실행 환경에 따라
CASE 1
TO_DATE('2020-03-31', yyyy-mm-dd) 로 해석하는 경우가 있는 반면,
CASE 2
TO_DATE('2020-03-31', DD-mm-RR) 과 같이 해석하는 경우가 생긴다.
2. 해결책
TO_DATE 함수 사용 시, 반드시 날짜 형식을 명확하게 기입하자.
-끝-