据我所知,我可以在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中以记住登录