sql >> データベース >  >> RDS >> Oracle

文字列を日付に変換し、指定された文字列が無効な場合に例外を発生させる

    TO_DATEによってスローされる可能性のある多くの例外があります 関数。例:

    • ORA-01843-月の値が無効です
    • ORA-01847-無効な日の値
    • ORA-01830-入力文字列全体を変換する前に日付形式の画像が終了します
    • ...

    次の例のようにそれらをキャッチできます(1つの例外のみ):

    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;
    

    ただし、そのためには nを定義する必要があります プラグマ!

    私が好むより簡単な解決策は次のとおりです。

    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;
    

    SQLERRMに表示される可能性のあるメッセージ はORA-01847: day of month must be between 1 and last day of month




    1. XAMPPが機能していません! -OS XYosemite

    2. SQL:結果の行を複数回繰り返し、行に番号を付けます

    3. MySQLタイムスタンプ選択の日付範囲

    4. MySQLのすべてのフィールドを置き換えます