Есть стандартное исключение в Spring - DuplicateKeyException.
Т.е. если при запросе возвращается ошибка ORA-00001, то Spring распознает ее как DuplicateKeyException.
Я возвращаю свой код ошибки. Как мне зарегистрировать исключение для ошибки с моим кодом. Что бы я мог пользоваться им как DuplicateKeyException?
В Oracle я вызываю
raise_application_error (-20101, 'Failed to create');
И вот эту ошибку мне надо обработать.
Костыль со стороны 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;
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости