sql >> Database teknologi >  >> RDS >> Oracle

Konvertering af en streng til dato og hævning af en undtagelse, når en given streng er ugyldig

Der er mange undtagelser, som kan forårsages af TO_DATE fungere. Eksempler:

  • ORA-01843 – Ugyldig månedsværdi
  • ORA-01847 – Ugyldig dagsværdi
  • ORA-01830 - billede i datoformat slutter før konvertering af hele inputstrengen
  • ...

Du kan fange dem som i følgende eksempel (med kun én undtagelse):

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 for det skal du definere n pragmer!

Den nemmere løsning, som jeg foretrækker, er:

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;

En mulig besked til SQLERRM er ORA-01847: day of month must be between 1 and last day of month .




  1. Postgres - fjern element fra jsonb-array

  2. Brug af indekser i SQL Server-hukommelsesoptimerede tabeller

  3. Fejl i produktion/heroku:WHERE a.attrelid ='skoler'::regclass

  4. Oracle forbindelse/forespørgsel timeout