to_date 함수를 사용한 SQL문에서 연월일을 지정한 문자열이 월에 대해서 지정된 형식을 따르지 않거나 잘못된 값을 지정할 경우 ORA-01843의 오류가 발생합니다.
오류 예1
다음의 예에서는 “13”이라는 존재하지 않는 월을 지정했기 때문에 오류가 발생했습니다.
C:\>sqlplus system/xxxxxxxx
SQL*Plus: Release 12.2.0.1.0 Production on 월 7월 26 02:10:18 2021
Copyright (c) 1982, 2016, Oracle. All rights reserved.
마지막 성공한 로그인 시간: 일 6월 27 2021 14:37:00 +09:00
다음에 접속됨:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
SQL> select to_date ('2021-13-26','YYYY/MM/DD') from dual;
select to_date ('2021-13-26','YYYY/MM/DD') from dual
*
1행에 오류:
ORA-01843: 지정한 월이 부적합합니다.
SQL>
오류 예2
다음의 예에서는 NLS_LANGUAGE=KOREAN의 NLS_DATE_FORMAT에 맞지 않은 월 형식을 지정했기 때문에 오류가 발생했습니다.
C:\>set NLS_LANG=KOREAN_KOREA.KO16MSWIN949
C:\>sqlplus system/xxxxxxxx
SQL*Plus: Release 12.2.0.1.0 Production on 월 7월 26 02:38:11 2021
Copyright (c) 1982, 2016, Oracle. All rights reserved.
마지막 성공한 로그인 시간: 월 7월 26 2021 02:33:09 +09:00
다음에 접속됨:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
SQL> COLUMN parameter FORMAT A20;
SQL> COLUMN value FORMAT A30;
SQL> select parameter , value from v$nls_parameters
2 where parameter in ( 'NLS_DATE_FORMAT','NLS_TIME_FORMAT','NLS_TIMESTAMP_FORMAT');
PARAMETER VALUE
-------------------- ------------------------------
NLS_DATE_FORMAT RR/MM/DD
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT RR/MM/DD HH24:MI:SSXFF
SQL> select parameter , value from v$nls_parameters
2 where parameter in ( 'NLS_LANGUAGE');
PARAMETER VALUE
-------------------- ------------------------------
NLS_LANGUAGE KOREAN
SQL> create table TEST_DATE (A1 DATE);
테이블이 생성되었습니다.
SQL> insert into TEST_DATE values ('21-APR-02');
insert into TEST_DATE values ('21-APR-02')
*
1행에 오류:
ORA-01843: 지정한 월이 부적합합니다.
정상 예
다음의 예에서는 NLS_LANGUAGE=AMERICAN의 NLS_DATE_FORMAT에 맞는 월 형식을 지정했기 때문에 오류가 발생하지 않았습니다.
C:\>set NLS_LANG=AMERICAN_AMERICA.US7ASCII
C:\>sqlplus system/xxxxxxxx
SQL*Plus: Release 12.2.0.1.0 Production on Mon Jul 26 02:33:09 2021
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Last Successful login time: Mon Jul 26 2021 02:10:18 +09:00
Connected to:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
SQL> COLUMN parameter FORMAT A20;
SQL> COLUMN value FORMAT A30;
SQL> select parameter , value from v$nls_parameters
2 where parameter in ( 'NLS_DATE_FORMAT','NLS_TIME_FORMAT','NLS_TIMESTAMP_FORMAT');
PARAMETER VALUE
-------------------- ------------------------------
NLS_DATE_FORMAT DD-MON-RR
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
SQL> select parameter , value from v$nls_parameters
2 where parameter in ( 'NLS_LANGUAGE');
PARAMETER VALUE
-------------------- ------------------------------
NLS_LANGUAGE AMERICAN
SQL> insert into TEST_DATE values ('21-APR-02');
1 row created.