Преобразование строки в дату и создание исключения, если данная строка недопустима - PullRequest
1 голос
/ 23 марта 2012

Вот мой код, приведенный ниже.Я хочу, чтобы указанная неправильная дата отображала сообщение «Неверный формат».

Но я не могу вызвать это исключение.
Неправильно ли использовано исключение, какое другое исключениепредоставленный оракулом я могу использовать для этого случая?

Create or Replace Procedure A1SF_TESTDATE
(
    pDateStr Varchar2
)As
    tDate Date;
    Begin
    tdate := TO_DATE(pDateStr, 'yyyymmdd');
    dbms_output.put_line(tdate);
    Exception 
      When INVALID_NUMBER Then
        dbms_output.put_line('The format provided is incorrect');

End;

1 Ответ

3 голосов
/ 23 марта 2012

Существует множество исключений, которые могут быть сгенерированы функцией TO_DATE. Примеры:

  • ORA-01843 - Неверное значение месяца
  • ORA-01847 - Неверное значение дня
  • ORA-01830 - изображение в формате даты заканчивается перед преобразованием всей входной строки
  • ...

Вы можете поймать их, как в следующем примере (только с одним исключением):

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...