Создание своих исключений Spring

213
26 сентября 2017, 05:15

Есть стандартное исключение в Spring - DuplicateKeyException.

Т.е. если при запросе возвращается ошибка ORA-00001, то Spring распознает ее как DuplicateKeyException.

Я возвращаю свой код ошибки. Как мне зарегистрировать исключение для ошибки с моим кодом. Что бы я мог пользоваться им как DuplicateKeyException?

В Oracle я вызываю

raise_application_error (-20101, 'Failed to create');

И вот эту ошибку мне надо обработать.

Answer 1

Костыль со стороны PL/SQL может выглядеть примерно так.
Исходный код (с перехватом и выводом ошибки):

begin
  raise_application_error (-20101, 'Failed to create');
exception
  when others then
    dbms_output.put_line(SQLCODE);
    dbms_output.put_line(SQLERRM);
end;

Здесь можно убедиться, что SQLCODE содержит значение -20101, а SQLERRM - ORA-20101: Failed to create.

Теперь перехватываем ошибку и генерируем value_error, а во внешнем блоке перехватываем, чтобы убедиться, что все работает:

begin
  begin
    raise_application_error (-20101, 'Failed to create');
  exception
    when others then
      raise value_error;
  end;
exception
  when others then
    dbms_output.put_line(SQLCODE);
    dbms_output.put_line(SQLERRM);
end;

Теперь SQLCODE содержит значение -6502, а SQLERRM содержит 2 строки:

ORA-06502: PL/SQL: numeric or value error
ORA-20101: Failed to create

В этих строках будет ваше исходное сообщение, которое вы передали в raise_application_error, и второе сообщение от оракла. Их можно распарсить, первую строку выкинуть, а вторая и будет искомым текстом.

То есть ваш код должен выглядеть как-то так:

  begin
    /* некоторая логика, которая может привести к ошибке */
    raise_application_error (-20101, 'Failed to create');
  exception
    when others then
      raise value_error;
  end;
READ ALSO
Изменение курсора мыши cursor:(путь к иконе), pointer;

Изменение курсора мыши cursor:(путь к иконе), pointer;

Господа, читаю документацию, вроде все понятно и проще пареной перы

357
Расположение фигуры на одной строке с текстом

Расположение фигуры на одной строке с текстом

Как поставить квадрат на одной линией с текстом?

380
Как расположить гугл карту на сайт?

Как расположить гугл карту на сайт?

Вот есть карта https://drivegoogle

320
Как абстрагировать скрипт?

Как абстрагировать скрипт?

Как этот скрипт вывести в отдельную функцию? и чтобы можно было вызывать её несколько раз

249