Как поймать и перебросить все ошибки в MySQL
Я не могу найти нигде, как поймать и повторно выбросить любые ошибки или предупреждения, которые могут возникнуть в процедуре.
Я хочу, чтобы синтаксис выполнял следующие действия:
create procedure myProcedure()
begin
declare exit handler for ANYTHING_WRONG_THAT_CAN_BE_CAUGHT_WARNINGS_INCLUDED
begin
rollback;
RE_THROW THE_THING_THAT_WAS_CAUGHT;
end;
start transaction;
-- do some stuff
commit;
end; //
Причина в том, что я хочу принудительно отменить ошибку или предупреждение, но оставьте ее клиенту, чтобы решить, что делать с конкретной ошибкой.
Области с полной крышкой - это части, где я не знаю, что положить.
Спасибо за любую помощь!
Изменить -------
С тех пор я узнал, что невозможно сделать то, что я спросил: '(.
Вместо этого у меня есть одна ошибка для чего-то, что идет не так, и использовал следующий код:
declare exit handler for sqlwarning, sqlexception begin
rollback;
call error();
end;
(error() не существует)
Ответы
Ответ 1
Чтобы уловить все исключения SQL, используйте:
DECLARE EXIT HANDLER FOR SQLEXCEPTION
SQLWARNINGS
также может использоваться для обнаружения предупреждений.
Внутри обработчика исключений, чтобы поднять ошибку или предупреждение, которое было только что обнаружено, используйте:
RESIGNAL
См. документацию для оператора RESIGNAL:
http://dev.mysql.com/doc/refman/5.5/en/resignal.html
Это доступно с MySQL 5.5