ORA-01843: not a valid month (지정한 월이 부적합합니다.)

Oracle DB

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=KOREANNLS_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=AMERICANNLS_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.
제목과 URL을 복사했습니다