Pokud start_date je NULL, není vyvolána žádná výjimka.
select to_date( null, 'mm/dd/yyyy' )
from dual
je dokonale platný SQL příkaz, který vrací NULL.
Chyba, která se vám zobrazuje, silně naznačuje, že alespoň některé řádky v start_date nejsou ve skutečnosti řetězce ve formátu, který očekáváte nebo který mapují na neplatná data (tj. řetězec '13/35/2007'). Můžete napsat funkci, která testuje, zda lze řetězec převést na datum a vrátit převedené datum nebo NULL. To pak můžete použít místo 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;
a poté použijte my_to_date místo to_date . To by mělo odstranit chybu, kterou dostáváte. Pravděpodobně však budete chtít vyčistit data, abyste se zbavili neplatných řetězců.