Oracle
 sql >> база данни >  >> RDS >> Oracle

Преобразуването на низ в Дата и повдигането на изключение, когато даден низ е невалидно

Има много изключения, които могат да бъдат хвърлени от TO_DATE функция. Примери:

  • ORA-01843 – Невалидна стойност за месеца
  • ORA-01847 – Невалидна стойност за деня
  • ORA-01830 - картината на формата на датата завършва преди конвертирането на целия въведен низ
  • ...

Можете да ги хванете както в следния пример (само с едно изключение):

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 .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съпоставяне на полето ORACLE TIMESTAMP(9) към java.util.Date

  2. Трудност при SQL JOIN - изглежда има нужда от начин за ограничаване на редове в условие за присъединяване

  3. Oracle Изберете максимална дата за множество записи

  4. Защита на базата данни в Oracle

  5. Как да преминавате през колони в курсор на oracle pl/sql