sql >> Database >  >> RDS >> Oracle

Een tekenreeks naar datum converteren en een uitzondering maken wanneer de opgegeven tekenreeks ongeldig is

Er zijn veel uitzonderingen die kunnen worden gegenereerd door de TO_DATE functie. Voorbeelden:

  • ORA-01843 - Ongeldige maandwaarde
  • ORA-01847 - Ongeldige dagwaarde
  • ORA-01830 - datumformaatafbeelding eindigt voordat de volledige invoerreeks wordt geconverteerd
  • ...

Je kunt ze vangen zoals in het volgende voorbeeld (met slechts één uitzondering):

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;

Maar daarvoor moet je n . definiëren pragma's!

De eenvoudigere oplossing, waar ik de voorkeur aan geef, is:

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;

Een mogelijk bericht voor SQLERRM is ORA-01847: day of month must be between 1 and last day of month .




  1. Mysql-oplossing voor vensterfuncties

  2. Opties voor cloudback-up voor MySQL- en MariaDB-databases

  3. SQL 2005 - Zoek opgeslagen procedures voor tekst (niet alle tekst wordt doorzocht)

  4. Hoe kan een javax.persistence.Column worden gedefinieerd als een niet-ondertekende TINYINT?