據我所知,我可以在MySQL存儲過程中定義異常處理程序,但似乎我無法捕獲處理程序中的異常消息,併爲調試目的在表中寫入日誌。我只想知道是否有方法在MySQL存儲過程中記錄異常代碼和消息?在MySQL存儲過程中記錄異常信息
1
A
回答
1
您無法捕獲郵件,但可以捕獲錯誤代碼。
這是對付「重複條目」的例子(PK,UK約束):
CREATE PROCEDURE sp_do_insert(
IN in_param1 int,
IN in_param2 int,
OUT out_status tinyint
)
BEGIN
DECLARE CONTINUE HANDLER FOR 1062 SET out_status = 1;
SET out_status = 0;
INSERT INTO tbl(field1, fiel2)
VALUES (in_param1, in_param2);
END;
如果tbl
有英國的約束上FIELD1,你會嘗試再次,你不會得到插入現有的值錯誤。不會插入任何內容,並且狀態將等於1.
您還可以爲其他錯誤代碼添加其他處理程序。並且由於out_status的值,您將始終知道錯誤是什麼,並且由於error_code(處理程序中),您將知道「錯誤消息」。
如果是out_status <> 0
,您可以嘗試使用show warnings
(它顯示最後一個查詢的錯誤/警告)。
希望它有幫助。
0
您可以截獲該消息,錯誤代碼時,SQL狀態,...,用GET DIAGNOSTICS語句,在5.6.4
見 http://dev.mysql.com/doc/refman/5.6/en/get-diagnostics.html
0
我不記得是什麼教程我從這個複製了。但是,它在5.6之前的MySQL版本中已經非常有幫助。感謝任何我從中學到的東西!
步驟1:創建一個debug_log表。這將保存你寫下的所有內容。
CREATE TABLE `debug_log` ( `debug_log_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `msg` varchar(512) NOT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`debug_log_id`) ) ENGINE=MyISAM
第2步:創建一個用於將信息添加到debug_log表的存儲過程。
DELIMITER $$ USE `your_db_name_here`$$ DROP PROCEDURE IF EXISTS `log_debug`$$ CREATE DEFINER=`ss7admin`@`%` PROCEDURE `log_debug`(IN lastMsg VARCHAR(512)) BEGIN INSERT INTO debug_log (msg) VALUES (lastMsg); END$$ DELIMITER ;
第3步:在您的真實存儲過程中添加處理程序。
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN CALL log_debug( CONCAT ( now(), ' : Something went horribly wrong!', '.' ) ); CALL log_debug('Exiting now'); SET outReturnCode = 1; END;
相關問題
- 1. 從mysql存儲過程返回異常
- 2. 信息存儲在異常對象:在異常
- 3. NLog記錄請求信息異常
- 4. MYSQL存儲過程只記錄更新
- 5. 日誌記錄mysql存儲過程sqls
- 6. 通過存儲過程在C#中向SQL Server插入記錄異常
- 7. Azure表存儲異常信息
- 8. 存儲記錄器信息asp.net
- 9. 快速記錄存儲請求信息
- 10. 安全(r)存儲MySQL登錄信息?
- 11. 如何在MySQL 5.5中獲取存儲過程的異常消息
- 12. MySQL - 如何在存儲過程中拋出異常?
- 13. MySQL存儲過程只返回記錄與子記錄
- 14. 在Java中記錄更好的異常信息
- 15. 在MySQL中存儲mongoid或在mongo中存儲MySQL記錄ID?
- 16. MySQL的存儲過程,檢查是否存在記錄
- 17. MySQL:可以從信息模式中提取存儲過程信息嗎?
- 18. 存儲過程中的異常管理?
- 19. 存儲過程的異常在asp.net
- 20. 在MySQL中存儲whois信息
- 21. 在Maven中停止從存儲庫中記錄下載信息
- 22. MySQL中的循環信息請求存儲過程或查詢
- 23. 從MySQL中存儲過程打印調試信息
- 24. 將登錄信息存儲在Cookie中
- 25. 使用存儲過程調用存儲過程的異常iBATIS
- 26. 存儲信息php/mysql
- 27. 調用在MySQL存儲過程常規
- 28. CLR存儲過程線程異常
- 29. 如何處理mysql中的存儲過程異常?
- 30. 將信息存儲在cookie中以記住登錄