Oracle
 sql >> Base de données >  >> RDS >> Oracle

Conversion d'une chaîne en date et levée d'une exception lorsque la chaîne donnée n'est pas valide

Il existe de nombreuses exceptions qui peuvent être levées par le TO_DATE fonction. Exemples :

  • ORA-01843 - Valeur de mois non valide
  • ORA-01847 - Valeur de jour invalide
  • ORA-01830 - l'image au format de date se termine avant la conversion de la chaîne d'entrée entière
  • ...

Vous pouvez les attraper comme dans l'exemple suivant (avec une seule exception) :

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;

Mais pour cela, vous devez définir n pragmatiques !

La solution la plus simple, que je préfère, est :

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;

Un message possible pour SQLERRM est ORA-01847: day of month must be between 1 and last day of month .