로컬에서는 잘 돌았던 쿼리가

운영 환경에 올리니 다음과 같은 에러가 발생했다.

(보안 상, 중요 정보는 삭제함.)

 


### 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 함수 사용 시, 반드시 날짜 형식을 명확하게 기입하자.

 

-끝-

+ Recent posts