sql >> Databáze >  >> RDS >> Oracle

Převod řetězce na datum a vyvolání výjimky, když je daný řetězec neplatný

Existuje mnoho výjimek, které mohou být vyvolány TO_DATE funkce. Příklady:

  • ORA-01843 – Neplatná hodnota měsíce
  • ORA-01847 – Neplatná hodnota dne
  • ORA-01830 – obrázek formátu data končí před převodem celého vstupního řetězce
  • ...

Můžete je zachytit jako v následujícím příkladu (s jedinou výjimkou):

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;

K tomu však musíte definovat n pragmatiky!

Jednodušší řešení, které preferuji, je:

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žná zpráva pro SQLERRM je ORA-01847: day of month must be between 1 and last day of month .




  1. Jak mohu správně vybrat příkaz k dotazu na tuto databázi?

  2. Existuje nějaký způsob, jak použít RSA v Oracle/PL SQL?

  3. Získejte levou část řetězce v SQL Server (T-SQL)

  4. Jak přidat omezení cizího klíče do existující tabulky v SQL Server - SQL Server / TSQL výukový program, část 68