오늘 회사 후배가 출근은 하시자 마자 옆에 있는 동기에게 질문을 했다.
"내 로컬 환경 DB에서는 Date타입 칼럼에 String을 넣었을 때 정상 동작했는데 같은 DB인데 개발 서버에서는 오류가 나요ㅠ 왜 그런 거예요..ㅠ" 음.. 나도 신입 때 똑같은 현상을 겪고 문제는 해결한 적이 있었다. 물론 to_date 명시적으로 형 변환을 해서 문제를 해결했던 기억이 나는데.. 정확하게 왜 그런 현상이 발생하는지는 찾아보진 않았다. 연차가 쌓이면서 느끼는 거지만.. 문제가 발생했을 때 정확히 원인을 파악하고 내 것으로 익히려는 노력을 해야겠다.
ORA-01861: literal does not match format string
ORA-01861: 리터럴이 형식 문자열과 일치하지 않음
위의 오라클 에러는 내 개발 환경에서는 정상 동작 하는데 실제 서버에서는 문제가 발생하는 오류 중에 하나이다.
- 발생원인
OS의 Lang설정이 달라 문자 열을 묵시적으로 날짜로 변환을 못해서 발생하는 오류이다.
묵시적으로 변환하고 싶다면 모든 클라이언트의 환경변수 LANG or NLS_LANG 설정을 맞춰야 한다.
예를 들어 JDBC THIN CLIENT 를 사용하는 JDBC 프로그램 같은 경우 NLS_DATE_FORMAT의 디폴트값은 NLS_TERRITORY에 의해 결정된다
그리고 NLS_TERRITORY의 디폴트값은 OS dependent 임을 알 수 있다.
즉!! OS 환경변수인 NLS_LANG 설정에 영향을 받습니다.
하지만 이 방법은 모든 애플리케이션 서버의 LANG을 세팅해야 하므로 좋은 방법은 아니다.
- 해결 방법
1. Date 형을 String 형으로 변환
TO_CHAR(SYSDATE, 'YYYYMMDD')
2. String형을 Date형으로 변환
TO_DATE('2020-07-01','YYYYMMDD')
'Database > Oracle' 카테고리의 다른 글
[Oracle] 오라클 NULL 치환 방법/ COALESCE 함수 사용법과 예제 (0) | 2020.10.23 |
---|---|
[Oracle] 오라클 첫 문자 대문자 변환 방법/ INITCAP 함수 사용법과 예제 (0) | 2020.10.20 |
[Oracle] 오라클 절대값 구하는 방법/ ABS 함수 사용법과 예제 (0) | 2020.10.19 |
[Oracle] 오라클 올림, 반올림, 내림, 버림 함수(TRUNC/ROUND/CEIL/FLOOR) 사용법과 예제 (0) | 2020.10.16 |
[Oracle] 최대값 최소값 구하기(GREATEST/LEAST) 사용법과 예제 (0) | 2020.03.19 |
댓글