개발자 환장하는 "ORA-01861: literal does not match format string"

 

개발자가 가장 미치는 상황중 하나는

 

내꺼에선 잘되는데 서버에 올리는 포팅만 하면 안되는 상황일 것이다.

 

그중 대표적인것중 하나가

 

ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 

ORA-01861: literal does not match format string 

 

바로 이 에러...

 

 

toad나 sqlgate 에선 잘만되는게 서버에만 올리면 안되는 미치는 상황이다.

 

일단, 원인은 TO_DATE와 TO_CHAR의 함수에 날짜형식을 지정하지 않았을 때

 

기본값으로 지정되는 형식이 달라서 그렇다.

 

TO_DATE('2014-01-01', 'YYYY-MM-DD') 이런식으로 쓰는데 두번째 인수인 'YYYY-MM-DD'를

 

생략해버리면 환경에 따라 서로 다른값이 지정되므로 최악의 경우

 

TO_DATE('2014-01-01', 'DD-MON-RR')  이런식으로 기본값이 들어가며 실행되는 경우가 생겨서 

 

위와같은 ORA-01861 오류가 생기는 것이다.

 

 

 

물론 최선의 해결책은 TO_DATE와 TO_CHAR를 쓸 때에는 항상 데이터형식을 지정하는 것이지만,

 

개발이라는게 어찌그리 되는가? 분명 어딘가에서는 빼먹기 마련인데,

 

빼먹은것이 서버에 올라갈때까지 발견 안된다는건 너무 위험한 상황이다.

 

 

게다가 저 에러는 뷰 내부나 저장프로시저 내부에서 빼먹어도 에러가 난다!

 

 

한마디로 내 소스 전체에서 TO_DATE나 TO_CHAR로 전체검색 한다고 찾아지는 문제가 아니란 의미.

 

그러므로 서버 환경을 내 로컬환경에도 맞춰서(!!) 서버에서 나는 에러는 나도 나는 상황이

 

더 좋은 개발환경이라고 생각된다.

 

 

 

그러니 한번이라도 서버에 sqlplus로 접속을 해서

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

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

 

이 쿼리를 한번 날려서 서버가 어떤값들이 사용되고 있는지 알아내자.

 

 

 

서버 sqlplus로 접속하기 어렵다면,

 

저쿼리를 실행하는 프로그램을 짜서 서버에 포팅해서 실행해 버리자.

 

아무튼 그런식으로 서버 환경값을 다 알아낸 다음에

 

내 환경도 서버랑 같게 맞춘다.

 

 

 

여기서 주의할것은 NLS_DATE_FORMAT 값 한개만 맞춘다고 되는게 아니라

 

NLS_LANGUAGE, NLS_DATE_LANGUAGE 까지 총 3개 전부 맞춰야 한다. 

 

 

 

일단 토드에서도 서버랑 같은 에러가 나는것이 속편함으로

 

토드 실행 후에 

 

ALTER SESSION SET NLS_LANGUAGE = 'AMERICAN';

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR';

ALTER SESSION SET NLS_DATE_LANGUAGE = 'AMERICAN'; 

 

이런식으로 한번 쿼리를 (물론 저 값을은 서버값으로 맞춘다)  날린다음에

 

오류가 나는 쿼리를 실행해보면 서버에서 나던 오류가 내 토드에서도 나는것을 확인할 수 있다.

 

 

 

아에 세션 전체나 접속환경차원에서 저값을 고정시키는 방법도 있지만

 

그 방법은 검색하면 나온다....... 하지만

 

TO_CHAR, TO_DATE의 두번째 인수를 항상 지정하는 버릇을 들이기 위해서라도

 

나는 일부러 고정하지 않고 있다.

 

[출처] https://m.blog.naver.com/jeemin5/220141590502

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86308
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78760
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95508
27 [java dbms][database] [컴] Apache Derby 사용하기 - 4 - in-memory DB 졸리운_곰 2021.04.15 1560
26 [java dbms][database] [컴] Apache Derby 사용하기 - 3 - Apache Derby Network Server 졸리운_곰 2021.04.15 1634
25 [java dbms][database] [컴] Apache Derby 사용하기 - 2 - sql script tool ij 사용하기 졸리운_곰 2021.04.15 1824
24 [java dbms][database] [컴] Apache Derby 사용하기 - 1 - Derby 설치 file 졸리운_곰 2021.04.15 1154
23 실습 2 - GROUP 졸리운_곰 2020.09.30 1550
22 [SQL 가이드] 데이터베이스 모델의 이해 (Understanding Database model) file 졸리운_곰 2020.06.13 2484
21 [SQL 가이드] 식별자(Identification)의 개념 file 졸리운_곰 2020.06.13 2061
20 [SQL 가이드] 관계(relationship)의 개념 file 졸리운_곰 2020.06.13 1556
19 [SQL 가이드] 속성(attribute)의 개념 file 졸리운_곰 2020.06.13 1704
18 [SQL 가이드] 엔티티의 개념 file 졸리운_곰 2020.06.13 2201
17 [SQL] join의 on절과 where절 차이 졸리운_곰 2020.05.16 1304
16 JOIN*(3개 테이블) and GROUP BY*(보이지않더라도 key칼럼으로) and ORDER BY 졸리운_곰 2020.05.16 1226
15 다중 테이블에서 데이터 검색 - JOIN file 졸리운_곰 2020.05.16 1597
14 IFNULL(MYSQL), ISNULL(MSSQL), NVL(ORACLE) 졸리운_곰 2018.07.24 1778
13 4 Ways to Join Only The First Row in SQL file 졸리운_곰 2018.07.03 1637
12 DBMS별 기존테이블 SELECT해서 새 테이블에 INSERT하여 데이터 ... file 졸리운_곰 2018.01.22 1593
11 SOL 개발자의 현주소 : 개발자가 SQL 작성시 고쳐야 하는 태도 file 졸리운_곰 2018.01.01 2159
10 오라클 운반 최소 단위 BLOCK file 졸리운_곰 2017.07.15 2036
9 재미있는 DB 이야기 ‘놀라운 마방진의 세계’ file 졸리운_곰 2017.07.15 2395
8 재미있는 DB 이야기 ‘사라진 날짜를 찾아라’ file 졸리운_곰 2017.07.15 2224
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED