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 |