以下是我的代码。我想如果给出的日期不正确,它应该显示一条消息“提供的格式不正确”。
但我无法提出异常 如果使用的异常不正确,我可以在这种情况下使用oracle提供的其他异常吗?
Create or Replace Procedure A1SF_TESTDATE
(
pDateStr Varchar2
)As
tDate Date;
Begin
tdate := TO_DATE(pDateStr, 'yyyymmdd');
dbms_output.put_line(tdate);
Exception
When INVALID_NUMBER Then
dbms_output.put_line('The format provided is incorrect');
End;
答案 0 :(得分:3)
TO_DATE
函数可以抛出许多异常。例子:
您可以像以下示例一样捕获它们(只有一个例外):
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 pragma!
我更喜欢的解决方案是:
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
。