TO_DATE
によってスローされる可能性のある多くの例外があります 関数。例:
- ORA-01843-月の値が無効です
- ORA-01847-無効な日の値
- ORA-01830-入力文字列全体を変換する前に日付形式の画像が終了します
- ...
次の例のようにそれらをキャッチできます(1つの例外のみ):
Create or Replace Procedure A1SF_TESTDATE
(
pDateStr Varchar2
-- you must do this for every oracle exception number which will you catch
bad_month EXCEPTION;
PRAGMA EXCEPTION_INIT (bad_month, -01843);
)As
tDate Date;
Begin
tdate := TO_DATE(pDateStr, 'yyyymmdd');
dbms_output.put_line(tdate);
Exception
When bad_month Then
dbms_output.put_line('The format provided is incorrect');
End;
ただし、そのためには nを定義する必要があります プラグマ!
私が好むより簡単な解決策は次のとおりです。
Create or Replace Procedure A1SF_TESTDATE
(
pDateStr Varchar2
)As
tDate Date;
Begin
tdate := TO_DATE(pDateStr, 'yyyymmdd');
dbms_output.put_line(tdate);
Exception
-- every exception will be catched
When others Then
dbms_output.put_line('The format provided is incorrect! Because: ' || SQLERRM);
End;
SQLERRM
に表示される可能性のあるメッセージ はORA-01847: day of month must be between 1 and last day of month
。