2013년 8월 31일 토요일

[Oracle] ORA-01481: 숫자 형식 모델이 부적합합니다.



우선 to_char 함수 자체에 대해서 이해를 하셔야 할 것 같습니다.

to_char 다음에 인수 두개가 있는데,
첫 번째 인수에는 number 타입이나 date 타입이 들어가고,
두 번째 인수에는 해당 타입을 어떤 char 타입으로 바꾸냐를 결정하는 것입니다.



두 번째 인수에 들어가는 타입은 메뉴얼을 통해 자세하게 알아보시길 바랍니다.

위 구문을 그대로 수행하면 다음과 같이 나올것입니다.
------------------------------------------------------------------
SQL> select to_char('200707081232','yyyy-mm-dd') from dual;
select to_char('200707081232','yyyy-mm-dd') from dual
                              *
1행에 오류:
ORA-01481: 숫자 형식 모델이 부적합합니다
-------------------------------------------------------------------
'' 로 묶이긴 했지만 number 타입의 형식이 들어갔기 때문에, number로 인식했고,
다음의 인수인 yyyy-mm-dd 로 바꾸려고 하지만
yyyy-mm-dd는 date를 char로 바꿀 때 쓰는 것입니다.
그러므로 에러가 날 수 밖에 없습니다.

200707081232가 사람이 볼 때는 날짜이나 오라클은 그것을 알 지 못합니다.
이유는 단지 varchar2로 만들었기 때문인거죠. 날짜를 인식하게 하려면 date 타입으로
conversion 되는게 필요합니다. 이 때 쓰는게 to_date고요..

SQL> select to_date('200707081232','yyyymmddhh24mi') from dual;
TO_DATE('20070708
-----------------
20070708 12:32:00

위와 같이 하면 각 캐릭터 자체가 의미를 지니게 됩니다.
하지만 원하는 것은 date가 아닌 char 형 이므로 to_char로 conversion 해야 합니다.
이 경우 to_char는 date를 받고 거기서 yyyy-mm-dd에 해당 되는 것을 뽑을 수 있습니다.

SQL> select to_char(to_date('200707081232','yyyymmddhh24mi'),'yyyy-mm-dd') from dual;
TO_CHAR(TO


[출처] ORA-01481: 숫자 형식 모델이 부적합합니다 |작성자 스마일정





댓글 없음:

댓글 쓰기