[Oracle] ORA-01841: (full) year must be between -4713 and +9999, and not be 0

2022. 10. 4. 23:05

발생

  • 업무 중 과거 데이터들을 수집하기 위한 스크립트를 작성하고 실행시키니 다음과 같은 오류 발생
  • sqlDeveloper에선 발생하지 않으나 python의 cx_Oracle에서 실행할 때만 발생
  • 해당 쿼리는 월 1일 ~ 월 말일 조건이 다수 존재하는 쿼리

원인파악

  • 해당 에러는 말 그대로 date형 컬럼을 변환할 때(보통 to_date) 년도가 -4713에서 9999 사이의 값, 0이 아닌 값이여야 한다는 에러
  • 테이블의 컬럼 타입과 입력한 데이터 타입이 다를 경우
  • 데이터의 크기가 오라클의 MAX값을 초과한 경우
  • 나의 경우는 datetime 객체를 std_date에 그대로 넣어버려서 문제가 발생

문제해결

--std_date : 기준년월 1일  
SELECT data1, data2, date_data  
FROM sample_table  
WHERE date_data between TO_DATE('{std_date}','YYYYMMDD') AND LAST_DAY(TO_DATE('{std_date}','YYYYMMDD'))

 

BELATED ARTICLES

more