문제가 있는 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