본문 바로가기
Error

ORA-01861: literal does not match format string

by 손프로 2023. 7. 23.

로컬에서 열심히 개발, 테스트 후 개발서버에 반영을 하니

로컬에서는 확인되지 않던 오류가 터지기 시작했다.

 

검색해보니 다른 분들도 비슷한 상황을 많이 겪으신 것 같은데

해당 에러는 꼭 로컬에서는 멀쩡히 돌다가 개발이나 혹은 운영에 반영했을 때 많이 나타나는 거로 보인다.

 

원인은 문자열 타입이나 Date타입 변형 시 형식을 명시적으로 지정해주지 않아서 발생한다.

근데 로컬에서는 정상적으로 돌지 않았나.. 이게 이해가 안되는 상황인데

 

이는 DB에서 디폴트로 잡히는 날짜형식과 내 로컬의 날짜 형식이 같기 때문

하지만 개발 혹은 운영서버에서는 LANG설정이 다르게 돼있기 때문에

이 형식이 맞지 않게되며 오류가 발생하는 것이다.

 

오라클에서 해당 설정을 확인하려면

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

 

위 쿼리로 확인가능하다.

 

이 경우 서버의 LANG설정을 변경해줘야 하는데

사이드 이펙트의 염려로 변경이 불가능한 상황일 경우

날짜나 문자열로 변환되는 부분을 직접 찾아 형식을 명시적으로 지정해줘야한다.

 

하지만 로컬에서는 에러가 발생하지 않으니 참 난감하다.

이때 위 쿼리로 DB에 설정된 언어 형식을 확인 후

로컬로 돌리는 OS환경의 날짜형식을 변경해주면 된다.

 

예를 들어 위 쿼리로 나오는 결과 값이 한국어일 경우

아마 에러가 발생하는 개발,운영 서버의 LANG설정은 영어로 돼있을 확률이 높은데

이와 같이 로컬서버를 돌리는 내 컴퓨터의 국가/지역 시간 설정의 메뉴에서 미국으로 바꿔준다면

개발, 운영 서버와 같이 해당 에러가 로컬에서도 발생하게 된다.

 

이후 직접 쿼리를 수정해가면서 조치하면된다.

댓글