DB/Oracle

ORA-01861: literal does not match format string (리터럴이 형식 문자열과 일치하지 않음)

밍꿔 2019. 11. 27. 10:03


반응형

 

 

ORA-01861: literal does not match format string (리터럴이 형식 문자열과 일치하지 않음)

 

개발자 로컬 환경에서는 정상적으로 실행되는 쿼리가 운영환경에 반영을 하면 이와 같은 에러가

 

발생되는 케이스가 종종 있다.

 

원인은 TO_DATE와 TO_CHAR의 함수에 날짜형식을 지정하지 않았을 때

 

기본값으로 지정되는 형식이 달라서 그렇다.

 

TO_DATE('2020-01-01', 'YYYY-MM-DD') 이런식으로 쓰는데 두번째 인수인 'YYYY-MM-DD'를

 

생략해버리면 환경에 따라 서로 다른값이 지정되기 때문에 위와같은 ORA-01861 오류가 생기는 것이다.

 

물론 최선의 해결책은 TO_DATE와 TO_CHAR를 쓸 때에는 항상 데이터형식을 맞게 사용 하는 것 이다.

 

하지만 다른 방법으로는 서버환경을 자신이 개발하는 로컬환경과 맞추는 방법도 있다.

 

서버에 접속하여

 

SELECT * FROM nls_session_parameters WHERE PARAMETER LIKE '%DATE%'

OR PARAMETER LIKE '%LANG%'; 

 

값을 로컬환경과 운영환경과 비교하여 맞춰준다. 

 

여기서 주의할것은 NLS_DATE_FORMAT, NLS_LANGUAGE, NLS_DATE_LANGUAGE 모두 맞춰줘야 한다.

 

ex) 로컬환경도 운영환경처럼 같은 환경으로 변경하여 테스트

 

ALTER SESSION SET NLS_LANGUAGE = 'AMERICAN';

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR';

ALTER SESSION SET NLS_DATE_LANGUAGE = 'AMERICAN'; 

 

 

 

 

반응형

'DB > Oracle' 카테고리의 다른 글

ORA-02292: integrity constraint  (0) 2020.01.17
ORA-01489: 문자열 연결의 결과가 너무 깁니다  (0) 2020.01.03
ORA-12514, ORA-12560  (0) 2019.11.19
Like % 검색속도 이슈  (0) 2019.10.23
Oracle Table Lock  (0) 2019.02.18