카테고리 없음

ORA-01861: literal does not match format string 확인 사항

Lawmin 2016. 6. 28. 16:43

문제가 있는 query이긴 하지만, 이전에 잘 돌아가다가 DB가 바뀌며 잘 안되는 경우가 있다.

ORA-01861 과 같은 경우인데, 대개는 SQL문이나 컬럼 타입 문제이긴 하지만, 프로그램 수정이 어렵다면, 기존 DB 설정에 맞춰야 한다.


특히, Query Tool에서는 이상이 없는데 SQLPLUS나 WAS에서 문제가 발생하며,

이 경우, WAS가 실행되는 계정의 LANG 설정을 확인해볼 필요가 있다.

첨부파일은 WAS Connection 의 NLS_PARAMETER 를 확인하는 프로그램이며,

NLS_DATE_FORMAT을 비교해보면 된다. (RR-MM-DD ? DD-MON-RR ?)



SYSDATE 형태가 다름 (SQL TYPE 문제는 차치)


SQL> select sysdate from dual;

 

SYSDATE

---------

28-JUN-16


 

SQL> select case when sysdate = TO_CHAR(SYSDATE, 'yyyy-mm-dd') then 1 else 0 end from dual;

select case when sysdate = TO_CHAR(SYSDATE, 'yyyy-mm-dd') then 1 else 0 end from dual

                            *

ERROR at line 1:

ORA-01861: literal does not match format string


환경 변수 추가 및 WAS 재시작


$ env | grep LANG

없음

$ export LANG=ko

$ env | grep LANG

LANG=ko

$ jdown

$ jboot


SYSDATE 형태가 바뀌며 에러가 사라짐


SQL> select sysdate from dual;

SYSDATE

-------------------

2016-06-28:16:40:22


SQL> select case when sysdate  = TO_CHAR(SYSDATE, 'DD-MON-RR') then 1 else 0 end from dual;


CASEWHENSYSDATE=TO_CHAR(SYSDATE,'DD-MON-RR')THEN1ELSE0END

---------------------------------------------------------

                                                        0