본문 바로가기

Error

[오라클Error] ORA-01861: literal does not match format string

728x90

1.  오라클 에러 ORA-01861 발생

디비툴에서 잘 작동하는 평범한 오라클 sql 업데이트문. 서버에 올리면 발생한다. 최근 신규 was로 옮기고 나서 아래와 같은 리터럴 에러가 종종 발생하고 있다.

ORA-01861: literal does not match format string

--- Check the CustomDAO.updateCustomerInfo2-InlineParameterMap.  
--- Check the statement (update failed).  
--- Cause: java.sql.SQLDataException: ORA-01861: literal does not match format string

 

2. 원인

리터럴 타입이 맞지 않아 발생한 오라클 구문 에러이다. 특히 TO_DATE나 TO_CHAR 날짜 타입을 지정하지 않았을 때 기본으로 지정하는 형식이 달라서 발생한다.

-- 인자를 정확하게 넣은 경우
SELECT TO_DATE('2024.08.22', 'YYYY.MM.DD') FROM DUAL

-- 2번째 인자인 'YYYY.MM.DD' 형식을 생략한 경우 ORA-01861 에러 발생!!
SELECT TO_DATE('2024.08.22') FROM DUAL

 

 

3. 해결방법

1) TO_DATE 함수를 사용할 때는 날짜 타입을 정확하게 지정해준다.

2) nls_session_parameters 테이블을 조회하여 서버에 설정한 NLS 세팅을 점검한다.

SELECT * FROM nls_session_parameters WHERE PARAMETER LIKE '%DATE%' OR PARAMETER LIKE '%LANG%';

쿼리 조회 결과

 

이때 NLS_DATE_FORMAT, NLS_LANGUAGE, NLS_DATE_LANGUAGE 모두 로컬 환경과 동일하게 맞추어야 한다.

참고!!! 세션이나 접속환경에서 해당하는 값을 설정하는 방법은 다음 포스팅에서...