본문 바로가기

푸로그래밍/Oracle

ORA-01861: literal does not match format string

반응형

SQLDeveloper, Datagrip에서는 정상적으로 작동하지만, runtime에서는 작동하지 않으면서 이런 에러가 난다.

IO를 최소화하던 과거에 만들어진 소스의 경우 SQL로 천지개벽을 많이 하곤 하는데, 이런데서 이런거 하나 나면 벌써부터 가슴이 답답해지고 스트레스를 받는다.

 

이는 사용하는 JDK에 따라, 사용하는 JDBC드라이버 버전에 따라, 기본적으로 사용하는 format에 대한 정책이 다르기 때문이다.

접속 OS설정을 따른다거나, Oracle의 기본 설정값을 따른다거나 하는 식이다.

따라서 사용하는 TO_DATE, TO_CHAR 함수에 date format을 전부 명시해 주면 된다.

 

현재 접속된 session에 대해 기본적으로 적용되는 date format은 아래의 query문으로 알아볼 수 있다.

SELECT 
    * 
FROM 
    nls_session_parameters 
WHERE 
    PARAMETER LIKE '%DATE%' OR PARAMETER LIKE '%LANG%'

 

 

기본적으로 사람들이 프로그래밍에서 주장하는 바는

  1. DB는 뭐가 오든 상관없는거 아니야?
  2. 인터페이스화 되어있는데 드라이버 몇버전 쓰든 상관없는거 아니야?

등등이 있다.

 

그러나 신규버전이 나왔다고 해서 기존에 운영중이던 서비스의 JDBC드라이버를 변경하지 않는다.

왜 그럴까? 무슨일이 일어날지 모르고 무섭기 때문이다.

왜냐면 구현체가 모두 다르기 때문이다.

 

해당 구현체의 특성에 기반한 프로그래밍이 아닌, 인터페이스 명세에 기반한 프로그래밍을 한다면, 정말 구현체로 어떤게 와도 문제없지 않을까 싶다. 

 

참조: https://m.blog.naver.com/jeemin5/220141590502

반응형