개발자 환장하는 "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 86157
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78651
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95385
42 블록체인 기반 플랫폼 비즈니스를 이해하자 졸리운_곰 2017.09.10 1554
41 다운타임 없는 서비스 구현 패턴 file 졸리운_곰 2017.09.10 1229
40 테이블의 수직분할과 수평분할에 대한 이해 file 졸리운_곰 2017.09.10 3908
39 정규화와 응집도에 대한 고찰 file 졸리운_곰 2017.05.28 1782
38 머신러닝 새 도전…“클라우드를 벗어나라" file 졸리운_곰 2017.05.28 1711
37 보안성 높이는 공공 거래장부 블록체인 file 졸리운_곰 2017.05.28 1757
36 디지털, 속도의 전쟁 VS 데이터, 품질의 전쟁 file 졸리운_곰 2017.05.05 1515
35 04. 데이터 모델링의 3단계 진행 file 졸리운_곰 2016.03.15 1659
34 데이터베이스 설계의 기본 원리.pdf file 졸리운_곰 2016.03.15 2353
33 실체유형(Entity Type) 정의 사항 및 도출 file 졸리운_곰 2015.05.21 2198
32 마농의 SQL 백문백답: 단순하고 쉽게 작성하는 SQL 노하우 [1회] file 졸리운_곰 2015.05.21 1829
31 sql개발자-sql전문가자격시험 시험 예제.pdf file 졸리운_곰 2015.02.15 2302
30 데이터베이스 선정에는 비밀이 있다 - 4부 졸리운_곰 2015.01.15 2095
29 데이터베이스 선정에는 비밀이 있다 - 3부 졸리운_곰 2015.01.15 2042
28 데이터베이스 선정에는 비밀이 있다 - 2부 졸리운_곰 2015.01.15 1827
27 데이터베이스 선정에는 비밀이 있다 - 1부 졸리운_곰 2015.01.15 2391
26 지금 우리에게 필요한 것은 데이터베이스 성능 최적화이다 (2부) 졸리운_곰 2015.01.15 1484
25 우리에게 필요한 것은 데이터베이스 성능 (1부) 졸리운_곰 2015.01.15 1775
24 21회 결과 secret 졸리운_곰 2014.11.10 0
23 [데이터아키텍쳐준전문가] 시험 fail 자료 secret 졸리운_곰 2014.08.31 0
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED