Error

[Error][Oracle] java.sql.SQLDataException: ORA-01839: 지정된 월에 대한 날짜가 부적합합니다

오선지♬ 2025. 1. 24. 10:11
728x90
반응형

MySQL 환경에서 썼던 쿼리를 그대로 옮겼을 때 에러가 발생했다.

MySQL과 Oracle의 날짜 처리는 조금 다릅니다.

차이점

  • MySQL: 잘못된 날짜를 사용할 경우 기본적으로 자동으로 가장 가까운 유효 날짜로 보정합니다. 예를 들어, 2025-02-31은 MySQL에서 자동으로 2025-02-28로 변환되며, 오류 없이 실행됩니다.
  • Oracle: 유효하지 않은 날짜는 오류 (ORA-01839)를 발생시킵니다. Oracle은 명시적으로 정확한 날짜를 지정해야 합니다.

MySQL에서 정상 작동했던 이유

MySQL은 다음과 같은 상황에서 유연하게 처리합니다:

  • '2025-02-31' → '2025-02-28'로 자동 수정
  • 이 벗어난 경우에도 자동으로 조정

Oracle에서 해결 방법

Oracle에서는 유효하지 않은 날짜를 처리하기 위해 다음과 같은 방법이 필요합니다:

  1. LAST_DAY 함수 사용
    LAST_DAY를 사용하면 해당 월의 마지막 날을 동적으로 계산할 수 있습니다:
    LAST_DAY(TO_DATE('2025-02', 'YYYY-MM'))
  2. 명시적으로 유효 날짜 설정
    MySQL과 다르게 Oracle에서는 직접 날짜를 지정해야 하기 때문에 아래와 같이 수정해야 합니다:
  3. 유효하지 않은 날짜 방어 코드 추가 날짜가 동적으로 결정될 때는 마지막 날을 계산해 입력하는 것이 안전합니다.

 

 

 

Oracle에서 MySQL과 동일하게 동작하려면 LAST_DAY()를 사용하는 방식이 가장 적합합니다.

728x90
반응형