로컬JDBC, 오라클DBMS(Toad)에서는 잘되는데 실서버에서 되질않습니다. 0 3 4,487

by 병기태 [SQL Query] ORA-01861 ORACLE JDBC CentOS Data Format [2018.03.28 16:41:21]


안녕하세요. 개월 수 차이를 구하는 간단한(?) 구문에서 에러가 발생하여 질문글을 올리게되었습니다.ㅠㅠ

 

SELECT  TRUNC(MONTHS_BETWEEN(TO_DATE(NVL('201802',TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYYMM')),'YYYYMM'), TRUNC(TO_DATE('2018-03-28'),'MM')))
  FROM  DUAL

 

위와 같은 입력1('YYYYMM'), 입력2('YYYY-MM-DD')의 개월 수 차이를 구하는 쿼리를 JDBC(ibatis)로 실행하는데요.

 

로컬환경(Window)과 DBMS로 위 구문을 실행하면 잘되는데 서버(CentOS)에서 실행하면

e.getMessage() : SqlMapClient operation; SQL [];   
--- The error occurred while applying a parameter map.  
--- Check the statement (update failed).  
--- Cause: java.sql.SQLDataException: ORA-01861: literal does not match format string
; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:   
--- The error occurred while applying a parameter map.  
--- Check the statement (update failed).  
--- Cause: java.sql.SQLDataException: ORA-01861: literal does not match format string

 

ORA-01861이라는 데이터 타입 오류라고 에러를 뱉어냅니다.

jdk버전도 같고 사용하는 DB서버와 오라클버전, 계정까지 모두 같은데 왜 실서버에서 실행하는 저런오류가 나올까요? ㅠㅠ

혹시 의심가는부분 있으면 조언 부탁드립니다!!

 

by 마농 [2018.03.28 16:45:28]

포멧 지정 안했네요. 수행 환경에 따라 에러 발생 됩니다.
 - 변경전 : TO_DATE('2018-03-28')
 - 변경후 : TO_DATE('2018-03-28', 'yyyy-mm-dd')


by 병기태 [2018.03.29 09:11:52]

감사합니다!!

확인해보니

변경전으로 돌아가던 jdk버전 : 1.7.0_79

안돌아가던             jdk버전 : 1.7.0_51  이네요 ㅠㅠ

앞자리 1.7만보고 버전으로인한 구문인식 오류는 생각 못했네요... 감사합니다

 


by 마농 [2018.03.29 09:26:45]

꼭 jdk 버전 문제만은 아닙니다.
위와 같이 포멧 미지정시에는 에러가 발생할 수 있는 가능성을 열어 놓은 것입니다.
포멧을 명확하게 지정한다면 어떠한 상황에서도 해당 에러는 안나겠지요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입