Доступ к стеку ошибок из обработчика хранимой процедуры - PullRequest
0 голосов
/ 15 марта 2012

У меня есть хранимая процедура, которая вызывает другую хранимую процедуру.Давайте назовем их OUTER и INNER.

Процедура INNER может обнаруживать ошибки на входе, и если она это делает, она вызывает / сигнализирует об этом следующим образом

signal sqlstate '45000' set message_text = 'some error';

В процедуре OUTER я могучтобы поймать это с помощью обычного обработчика, как это

declare exit handler for sqlstate '45000'
begin
  -- this is where I'd like to access the message_text from INNER
end    

, но я не могу найти способ чтения внутренних частей сигнала.

Я видел, что он может быть доступен в 5.6, но это еще не GA и, вероятно, будет ненадежным некоторое время после релиза.

Любые желающие по этому поводу .?

Ответы [ 2 ]

1 голос
/ 15 марта 2012

Когда условие SQL (предупреждение, ошибка) возникает и затем перехватывается в обработчике исключений, единственный способ узнать подробности о том, что произошло, - использовать оператор GET DIAGNOSTICS.

Смотрите документацию: http://dev.mysql.com/doc/refman/5.6/en/get-diagnostics.html

Это утверждение действительно доступно только с 5.6.

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

0 голосов
/ 08 апреля 2012

Поскольку это недоступно до 5.6, я закончил тем, что создал хранимую процедуру, которая и отправляет сигнал, но также устанавливает текст ошибки в переменную сеанса

delimiter //

create procedure send_signal (error_text varchar(255))
begin
  set @session_error_text := error_text;
  signal sqlstate '45000' set message_text = error_text;
end//

delimiter ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...