start_date
の場合 NULLの場合、例外はスローされません。
select to_date( null, 'mm/dd/yyyy' )
from dual
NULLを返す完全に有効なSQLステートメントです。
発生しているエラーは、start_date
の行の少なくとも一部が 列は、実際には期待する形式の文字列ではなく、無効な日付にマップされます(つまり、文字列「13/35/2007」)。文字列を日付に変換して、変換された日付またはNULLを返すことができるかどうかをテストする関数を作成できます。その後、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;
次に、my_to_date
を使用します to_date
の代わりに 。それはあなたが得ているエラーを排除するはずです。ただし、無効な文字列を取り除くために、データをクリーンアップすることをお勧めします。