mysql 存储过程 获取错误信息 继续执行
2016-07-14 00:00
656 查看
MySQL存储过程中的错误处理
作者:UncleToo 来源:翻译 日期:2014-05-20 7:53:13收藏 评论:( 2 ) 阅读:1985
当MySQL执行存储过程遇到错误时,适当处理它,如继续执行或退出当前代码段,并返回有意义的错误提示是很重要的。一方面提高程序的容错能力,另一方便当程序出错时,开发人员也能准确定位错误的地方。
在本章MySQL教程中,我们将学习如何在存储过程中处理程序错误。
声明处理程序
MySQL为我们提供了一种简单的方法定义处理程序,我们可以使用DECLARE HANDLER语句,如下所示:
1 | DECLARE action HANDLER FOR condition_value statement; |
action 可以是以下两种:
CONTINUE:继续执行当前代码块
EXIT:退出当前代码块
condition_value 是一类特定的条件,可以使一下几种:
一个MYSQL错误代码
一个标准的SQLSTATE值,如SQLWARNING,NOTFOUND,SQLEXCEPTION等
statement 是一个语句块,从BEGIN开始,到END结束。它可以是一个简单的sql语句,也可以是很复杂的逻辑语句。
MySQL错误处理的例子
例1:当程序发生错误,将has_error值置为1。如:
1 | DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET has_error = 1; |
1 2 3 4 5 | DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK ; Select '发生错误,执行将被回滚,程序将终止执行' ; END ; |
1 | DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_row_found = 1; |
1 2 | DECLARE CONTINUE HANDLER FOR 1062 Select '错误:重复键值' ; |
首先我们创建一张数据表,为测试所用。
1 2 3 4 5 | Create TABLE article_tags( article_id INT , tag_id INT , PRIMARY KEY (article_id,tag_id) ); |
其次,我们创建一个存储过程,实现插入文章ID和标签ID。
1 2 3 4 5 6 7 8 9 10 11 | DELIMITER $$ Create PROCEDURE insert_article_tags( IN article_id INT , IN tag_id INT ) BEGIN DECLARE CONTINUE HANDLER FOR 1062 Select CONCAT( '错误:重复键值 (' ,article_id, ',' ,tag_id, ')' ) AS msg; -- 插入新的记录 Insert INTO article_tags(article_id,tag_id) VALUES (article_id,tag_id); -- 返回标签数量 Select COUNT (*) FROM article_tags; END |
相关文章推荐
- MySQL数据库管理工具
- mysql安装时出现error1045解决办法
- MySQL5.7中使用JSON(一)
- MYSQL数据库管理之权限管理
- MySQL读书笔记-事务日志,MySQL中的事务
- 从MySQL导出到PostgreSQL
- mysql优化--博森瑞
- MySQL索引原理及慢查询优化
- MySQL 5.7 双主复制+keepalived,常规业务一般够用了
- MySQL 随机取数据效率问题
- MySQL常用函数及注意(ing)
- MySQL中文乱码修改
- mysql中用int来表示时间
- 采用MySQL_upgrade升级授权表方式升级
- 升级MySQL 5.7版本遇到的一些小问题(转)
- 知数堂MySQL DBA在线培训第八期招生中
- 知数堂培训在线免费分享《MySQL 5.7 Replication新特性》
- MySQL5.7绿色版安装
- mysql 常用函数(二)
- Lost connection to MySQL server at ‘reading initial communication packet', system error: 0