로컬에서는 잘 돌았던 쿼리가
운영 환경에 올리니 다음과 같은 에러가 발생했다.
(보안 상, 중요 정보는 삭제함.)
### 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 함수 사용 시, 반드시 날짜 형식을 명확하게 기입하자.
-끝-
'IT | 개발 > Database' 카테고리의 다른 글
[Oracle] TOP 함수 구현하기 (2) | 2020.05.22 |
---|---|
[Oracle] 작은 따옴표 ' 가 포함된 Column 검색하기(like 사용) (0) | 2020.05.19 |
[Oracle] Jboss 에서 Oracle DB 서버 설정 파일 위치 (0) | 2020.02.14 |
[Oracle] 시퀀스 생성 및 테이블 적용하기 (0) | 2020.02.13 |
[Oracle] 시퀀스 생성/조회/수정/삭제 예시 (2) | 2020.02.12 |