Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Chuyển đổi một chuỗi thành ngày tháng và nâng cao một ngoại lệ khi chuỗi đã cho không hợp lệ

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 SQLERRMORA-01847: day of month must be between 1 and last day of month .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách cấp quyền truy cập vào v $ views (v $ session, v $ instance)

  2. Cách nối nhiều hàng theo thứ tự trong Oracle10g

  3. Hỗ trợ JSON trong Oracle 11g

  4. Cách chạy Opatch ở dạng không tương tác

  5. Làm thế nào để triển khai tìm nạp hàng loạt với Fluent NHibernate khi làm việc với Oracle?