Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Konwertowanie String na Date i zgłaszanie wyjątku, gdy podany String jest nieprawidłowy

Istnieje wiele wyjątków, które mogą zostać zgłoszone przez TO_DATE funkcjonować. Przykłady:

  • ORA-01843 — Nieprawidłowa wartość miesiąca
  • ORA-01847 — Nieprawidłowa wartość dnia
  • ORA-01830 — obraz w formacie daty kończy się przed konwersją całego ciągu wejściowego
  • ...

Możesz je złapać jak w poniższym przykładzie (z jednym wyjątkiem):

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;

Ale w tym celu musisz zdefiniować n pragmy!

Łatwiejszym rozwiązaniem, które preferuję, jest:

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;

Możliwa wiadomość dla SQLERRM jest 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. Jak mogę zdefiniować typ w oracle11g, który odwołuje się do kolekcji tego typu?

  2. Procedury składowane programu SQL Server firmy Oracle®

  3. Jak zoptymalizować zapytanie Oracle, które ma to_char w klauzuli where dla daty?

  4. jak możemy uzyskać wartość VARRAY z parametru IN w procedurze?

  5. Łączenie liczb w wyrażeniu kolumny wirtualnej powoduje wyświetlenie ORA-12899:wartość za duża dla kolumny