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ů.