ORA-01841: 년은 영이 아닌 -4713 과 +4713 사이의 값으로 지정해야 합니다. 오류를 해결해 보도록 합시다. 한글로 번역된 오류는 -4713과 +4713 사이 값으로 지정하라고 나오는데요, 영문으로 발생하는 경우, -4713과 +9999 사이 값을 지정하라고 나오는 오류예요. 🙂
ORA-01841 오류는 부적절한 연도를 입력했을 때 주로 발생합니다. 이 오류의 원인과 해결 방법을 설명드리겠습니다.
원인 설명
원인: 잘못된 연도가 입력되었습니다. 연도는 -4713과 +9999 사이의 값이어야 하며, 0은 포함되지 않습니다.
조치: 연도를 지정된 범위 내에서 입력합니다.
발생 원인
- 테이블의 컬럼 타입과 입력한 데이터의 타입이 다를 경우 - DATE타입의 컬럼에 문자열 타입의 데이터를 입력한 경우.
- DATE타입으로 지정한 데이터가- NULL값인 경우.
 
- 데이터의 크기가 오라클의 최대값을 초과한 경우 - 날짜의 최대값인 '9999-12-31' 이상의 일자를 등록하려 하는 경우.
 
예시로 알아보기
오라클의 기본 예제 테이블인 EMP 테이블을 사용하여 간단한 예시를 통해 'ORA-01841' 오류 발생과 해결 방법을 보여드리겠습니다.
쿼리 예시와 오류 발생
먼저 EMP 테이블에 날짜 값을 삽입할 때 잘못된 연도를 사용하는 경우를 예시.
INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES (9999, 'TEST', 'CLERK', 7839, TO_DATE('0000-01-01', 'YYYY-MM-DD'), 800, NULL, 10);
ERROR at line 1:
ORA-01841: (full) year must be between -4713 and +9999, and not be 0위 쿼리에서 연도 0000은 유효하지 않기 때문에 'ORA-01841' 오류가 발생합니다.
오류 해결 방법
입력하려는 날짜가 현재 날짜를 초과하지 않도록 하여 오류를 피하는 예시.
INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES (9999, 'TEST', 'CLERK', 7839, SYSDATE, 800, NULL, 10);
1 row created.이 쿼리에서는 SYSDATE를 사용하여 현재 날짜를 입력하기 때문에 날짜 범위 오류가 발생하지 않도록 해보았는데요, 이외에도 지정한 연도가 정상적인 범위 안이라면 오류가 발생하지 않을 것입니다.
오류의 발생을 원천적으로 막고자 한다면, 프로그램에서 별도의 함수를 만들거나, 프로시저나 펑션을 통해 입력된 값의 검증을 하도록 추가하는 방향을 검토할 수 있어요. 😊
