2012-03-15 102 views
0

我有調用另一個存儲過程的存儲過程。我們稱它們爲「外部」和「內部」。從存儲過程處理程序中訪問錯誤堆棧

內部程序可以檢測錯誤輸入和如果這樣做,將提高/信號,它這樣

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

外的程序,我能與這樣

正常的處理程序來捕捉這個
declare exit handler for sqlstate '45000' 
begin 
    -- this is where I'd like to access the message_text from INNER 
end  

但我無法找到讀取信號內部部分的方法。

我已經看到它可能在5.6中可用,但這不是GA,可能會在發佈後一段時間搖晃。

任何這個。

回答

0

由於這是不可用,直到5.6我結束了創建一個存儲過程,既發送信號,而且還將設置一個會話varible錯誤文本

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 ; 
1

當發生SQL條件(警告,錯誤)並隨後捕獲到異常處理程序時,知道有關發生的詳細信息的唯一方法是使用GET DIAGNOSTICS語句。

看到該文檔: http://dev.mysql.com/doc/refman/5.6/en/get-diagnostics.html

這種說法確實只是開始可用5.6。

對於5.5及更早版本,無法訪問 - 即從異常處理程序中的代碼 - 到您正在查找的數據。