sql >> Databasteknik >  >> RDS >> Oracle

Att konvertera en sträng till datum och göra ett undantag när en given sträng är ogiltigt

Det finns många undantag som kan orsakas av TO_DATE fungera. Exempel:

  • ORA-01843 – Ogiltigt månadsvärde
  • ORA-01847 – Ogiltigt dagvärde
  • ORA-01830 - bild i datumformat slutar innan hela inmatningssträngen konverteras
  • ...

Du kan fånga dem som i följande exempel (med endast ett undantag):

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;

Men för det måste du definiera n pragmer!

Den enklare lösningen, som jag föredrar, är:

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;

Ett möjligt meddelande för SQLERRM är ORA-01847: day of month must be between 1 and last day of month .




  1. Hur skapar jag en lagrad procedur som valfritt söker efter kolumner?

  2. Homebrew MySQL 8.0.18 på macOS 10.15 Catalina kommer inte att köras som tjänst

  3. Fråga för att lista alla lagrade procedurer

  4. FEL 1030 (HY000) på rad 25:Fick fel 168 från lagringsmotorn