Có nhiều ngoại lệ có thể được đưa ra trước TO_DATE
hàm số. Ví dụ:
- ORA-01843 - Giá trị tháng không hợp lệ
- ORA-01847 - Giá trị ngày không hợp lệ
- ORA-01830 - hình ảnh định dạng ngày kết thúc trước khi chuyển đổi toàn bộ chuỗi đầu vào
- ...
Bạn có thể bắt gặp chúng như trong ví dụ sau (chỉ với một ngoại lệ):
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;
Nhưng đối với điều đó bạn phải xác định n pragmas!
Giải pháp dễ dàng hơn, mà tôi thích hơn, là:
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;
Một thông báo có thể có cho SQLERRM
là ORA-01847: day of month must be between 1 and last day of month
.