Подтвердить что ты не робот

Как поймать и перебросить все ошибки в 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() не существует)

4b9b3361

Ответ 1

Чтобы уловить все исключения SQL, используйте:

DECLARE EXIT HANDLER FOR SQLEXCEPTION

SQLWARNINGS также может использоваться для обнаружения предупреждений.

Внутри обработчика исключений, чтобы поднять ошибку или предупреждение, которое было только что обнаружено, используйте:

RESIGNAL

См. документацию для оператора RESIGNAL:

http://dev.mysql.com/doc/refman/5.5/en/resignal.html

Это доступно с MySQL 5.5