Se start_date
è NULL, non viene generata alcuna eccezione.
select to_date( null, 'mm/dd/yyyy' )
from dual
è un'istruzione SQL perfettamente valida che restituisce NULL.
L'errore che stai ricevendo implica fortemente che almeno alcune delle righe nella start_date
le colonne non sono in realtà stringhe nel formato previsto o che mappano a date non valide (ad esempio la stringa "35/13/2007"). È possibile scrivere una funzione che verifichi se una stringa può essere convertita in una data e restituire la data convertita o un NULL. Puoi quindi usarlo al posto di to_date
.
CREATE OR REPLACE FUNCTION my_to_date( p_str IN VARCHAR2,
p_format IN VARCHAR2 )
RETURN DATE
IS
BEGIN
RETURN to_date( p_str, p_format );
EXCEPTION
WHEN OTHERS
THEN
RETURN NULL;
END;
e poi usa my_to_date
invece di to_date
. Ciò dovrebbe eliminare l'errore che stai ricevendo. Probabilmente vorrai ripulire i dati, però, per sbarazzarti delle stringhe non valide.