从存储过程处理程序中访问错误堆栈

时间:2012-03-15 13:49:29

标签: mysql stored-procedures

我有调用另一个存储过程的存储过程。我们称他们为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 个答案:

答案 0 :(得分:1)

当引发SQL条件(警告,错误)然后在异常处理程序中捕获时,了解发生的事情的唯一方法是使用GET DIAGNOSTICS语句。

查看文档: http://dev.mysql.com/doc/refman/5.6/en/get-diagnostics.html

此声明确实只能从5.6开始。

对于5.5及更早版本,无法访问 - 即从异常处理程序中的代码 - 到您要查找的数据。

答案 1 :(得分:0)

由于直到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 ;