Откат MySQL в обработчике

У меня есть хранимая процедура, в которой я хотел бы откат на случай, если что-то пойдет не так. Для этого я использую EXIT HANDLER следующим образом:

DECLARE EXIT HANDLER FOR sqlexception begin ROLLBACK; end; 

Но таким образом, когда я вызываю эту хранимую процедуру, в случае каких-либо ошибок, хранимая процедура будет успешной, и я не знаю, в чем была проблема. Я хочу, чтобы клиент (php) регистрировал ошибку, чтобы устранить ее. Поэтому я изменяю таким образом:

 DECLARE EXIT HANDLER FOR sqlexception begin get diagnostics condition 1 @p1 = MESSAGE_TEXT; ROLLBACK; SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = @p1; end; 

Таким образом, теперь откат хранимой процедуры и выброс исключений, которые обработчик перехватил. Это круто, но иногда MESSAGE_TEXT составляет более 128 символов, и в таких случаях я получаю:

Код ошибки: 1648. Слишком длинные данные для условия «MESSAGE_TEXT»

Конечно, это решение неприемлемо:

 DECLARE EXIT HANDLER FOR sqlexception begin get diagnostics condition 1 @p1 = MESSAGE_TEXT; ROLLBACK; SET @p1=SUBSTRING(@p1,1,128); SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = @p1; end; 

Есть ли способ перехватить какое-либо исключение, откат и затем выбросить то же исключение клиенту? Большое спасибо за вашу помощь