Si start_date
es NULL, no se lanza ninguna excepción.
select to_date( null, 'mm/dd/yyyy' )
from dual
es una declaración SQL perfectamente válida que devuelve NULL.
El error que está recibiendo implica fuertemente que al menos algunas de las filas en start_date
columna no son en realidad cadenas en el formato esperado o que se asignan a fechas no válidas (es decir, la cadena '35/13/2007'). Puede escribir una función que compruebe si una cadena se puede convertir en una fecha y devolver la fecha convertida o un valor NULL. Luego puede usar eso en lugar de 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;
y luego use my_to_date
en lugar de to_date
. Eso debería eliminar el error que está recibiendo. Sin embargo, probablemente querrá limpiar los datos para deshacerse de las cadenas no válidas.