Der ORA-01839 Fehler, benannt nach seinem Code in der Oracle-Datenbank, tritt auf, wenn ein Datum außerhalb des gültigen Bereichs liegt, der normalerweise zwischen dem 1. Januar 4712 v. Chr. und dem 31. Dezember 9999 n. Chr. liegt. Der 29. Februar, als seltener Gast im Kalender, kann zu unvorhergesehenen Komplikationen führen, wenn nicht angemessen darauf geachtet wird. So sind zum Beispiel diverse SQL-Interval-Funktionen für Datumsberechnungen im Monats- und Jahresbereich nicht schaltjahressicher. Addiert oder subtrahiert man mithilfe dieser Funktionen zum/vom 29. Februar einen Wert, der nicht ein Vielfaches von vier Jahren oder 48 Monaten ist, erhält man einen
ORA-01839: date not valid for month specified
Das betrifft mindestens folgende SQL-Funktionen:
NUMTOYMINTERVAL
TO_YMINTERVAL
INTERVAL
SQL> select to_date('29-FEB-24')+numtoyminterval(1,'year') from dual; select to_date('29-FEB-24')+numtoyminterval(1,'year') from dual * ERROR at line 1: ORA-01839: date not valid for month specified
SQL> select to_date('29-FEB-24')+to_yminterval('1-0') from dual; select to_date('29-FEB-24')+to_yminterval('1-0') from dual * ERROR at line 1: ORA-01839: date not valid for month specified
SQL> select to_date('29-FEB-24')+interval '1' year from dual; select to_date('29-FEB-24')+interval '1' year from dual * ERROR at line 1: ORA-01839: date not valid for month specified
add_months
-Funktion zu ersetzen, die hinsichtlich Schaltjahresberechnung offenbar sauber implementiert wurde: SQL> select add_months(to_date('29-FEB-24'),12) from dual; ADD_MONTH --------- 28-FEB-25 SQL> select add_months(to_date('29-FEB-24'),-12) from dual; ADD_MONTH --------- 28-FEB-23
Share this article