Se
start_date
é NULL, nenhuma exceção é lançada. select to_date( null, 'mm/dd/yyyy' )
from dual
é uma instrução SQL perfeitamente válida que retorna NULL.
O erro que você está recebendo implica fortemente que pelo menos algumas das linhas no
start_date
coluna não são realmente strings no formato que você espera ou que mapeiam para datas inválidas (ou seja, a string '13/35/2007'). Você pode escrever uma função que testa para ver se uma string pode ser convertida em uma data e retornar a data convertida ou um NULL. Você pode usar isso em vez 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;
e, em seguida, use
my_to_date
em vez de to_date
. Isso deve eliminar o erro que você está recebendo. Você provavelmente vai querer limpar os dados, no entanto, para se livrar das strings inválidas.