로컬에서 잘 되던 코드를 스테이징 서버에 올리자 발생한 오류입니다.
로그를 확인해보니 아래와 같은 내용을 확인할 수 있었습니다.
ORA-01861: literal does not match format string
문제가 된 쿼리는 아래와 같습니다.
req_date는 VARCHAR2(8) 타입으로 선언됐습니다. 이 값을 DATE 형태로 변환 후 'YYYY-MM-DD' 형태로 포맷하는 부분이 원인이었습니다.
SELECT i1.seq
, i1.proc_type
, i1.req_content
, i1.req_user_name
, TO_CHAR(TO_DATE(i1.req_date), 'YYYY-MM-DD') AS req_date
FROM MY_TABLE i1
WGERE ...
TO_DATE 시 날짜 지정 포맷이 환경에 따라 다른값이 지정됩니다. 'YYYY-MM-DD' 또는 'YY-MM-DD' 또는 다른 값으로 설정될 수 있습니다.
이에 TO_DATE, TO_CHAR 사용시에는 데이터 형식을 지정하는 것이 좋습니다.
수정된 쿼리는 다음과 같습니다.
SELECT i1.seq
, i1.proc_type
, i1.req_content
, i1.req_user_name
, TO_CHAR(TO_DATE(i1.req_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') AS req_date
FROM MY_TABLE i1
WGERE ...
서버 환경의 DATE_FORMAT이 어떻게 되어있는지 확인하는 방법은 다음과 같습니다.
SELECT VALUE
FROM v$nls_session_parameters
WHERE PARAMETER LIKE '%DATE%'
참고문서