1. 语法:

DECLARE handler_action HANDLER
FOR condition_value [, condition_value] ...
statement handler_action:
CONTINUE
| EXIT
| UNDO condition_value:
mysql_error_code
| SQLSTATE [VALUE] sqlstate_value
| condition_name
| SQLWARNING
| NOT FOUND
| SQLEXCEPTION

If one of these conditions occurs, the specified statement executes. statement can be a simple statement such as SETvar_name = value, or a compound statement written using BEGIN and END.

http://dev.mysql.com/doc/refman/5.0/en/declare-handler.html

2. 实例

实例1:

DROP TABLE IF EXISTS tb1;
CREATE TABLE tb1(
field1 INT NOT NULL COMMENT 'id',
field2 INT COMMENT 'value',
PRIMARY KEY(field1)
)ENGINE=INNODB DEFAULT CHARSET=UTF8 COMMENT ='临时测试表' DROP PROCEDURE IF EXISTS sp_do_insert;
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 tb1(field1, field2)
VALUES (in_param1, in_param2);
IF out_status=1 THEN
select in_param1, in_param2;
END IF;
END; CALL sp_do_insert(2,200,@out);
SELECT @out;

实例2:begin 。。。end块异常处理

DROP TABLE IF EXISTS tb1;

CREATE TABLE tb1(

field1 INT NOT NULL COMMENT 'id',

field2 INT COMMENT 'value',

PRIMARY KEY(field1)

)ENGINE=INNODB DEFAULT CHARSET=UTF8 COMMENT ='临时测试表'

DROP PROCEDURE IF EXISTS sp_do_insert;

CREATE PROCEDURE sp_do_insert(

   IN in_param1    int,

   IN in_param2    int,

   IN in_param3    int,

   IN in_param4    int,

         OUT out_status1  tinyint,

         OUT out_status2  tinyint

)

BEGIN

         BEGIN

   DECLARE CONTINUE HANDLER FOR 1062 SET out_status1 = 1;

   SET out_status1 = 0;

   INSERT INTO tb1(field1, field2)VALUES (in_param1, in_param2);

   IF out_status1=1 THEN

        select in_param1, in_param2;

                                     select '1062--------11' AS 'first result';

   END IF;

  END;

         BEGIN

         DECLARE CONTINUE HANDLER FOR 1062 SET out_status2 = 1;

   SET out_status2 = 0;

   INSERT INTO tb1(field1, field2)VALUES (in_param3, in_param4);

   IF out_status2=1 THEN

        select in_param3, in_param4;

                                     select '1062--------22' AS 'secord result';

   END IF;

         END;

END;

CALL sp_do_insert(1,100,2,200,@out1,@out2);

SELECT @out1,@out2;

select * from tb1;

3. server error code

http://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html

常见errorcode

  • Error: 1172 SQLSTATE: 42000 (ER_TOO_MANY_ROWS)

    Message: Result consisted of more than one row

  • Error: 1062 SQLSTATE: 23000 (ER_DUP_ENTRY)

    Message: Duplicate entry '%s' for key %d

  • Error: 1329 SQLSTATE: 02000 (ER_SP_FETCH_NO_DATA)

    Message: No data - zero rows fetched, selected, or processed

mysql 异常处理实例的更多相关文章

  1. MYSQL多实例配置方法 mysqld_multi方法

    在实际的开发过程中,可能会需要在一台服务器上部署多个MYSQL实例,那建议使用MYSQL官方的解决方案 mysqld_multi 1.修改my.cnf 如一个定义两个实例的参考配置: [mysqld_ ...

  2. MySQL优化实例

    这周就要从泰笛离职了,在公司内部的wiki上,根据公司实际的项目,写了一些mysql的优化方法,供小组里的小伙伴参考下,没想到大家的热情很高,还专门搞了个ppt讲解了一下. 举了三个大家很容易犯错的地 ...

  3. mysql 优化实例之索引创建

    mysql 优化实例之索引创建 优化前: pt-query-degist分析结果: # Query 23: 0.00 QPS, 0.00x concurrency, ID 0x78761E301CC7 ...

  4. PHP调用MYSQL存储过程实例

    PHP调用MYSQL存储过程实例 标签: mysql存储phpsqlquerycmd 2010-09-26 11:10 11552人阅读 评论(3) 收藏 举报 实例一:无参的存储过程$conn = ...

  5. JDBC连接MySQL 方法 实例及资料收集

    JDBC连接MySQL 方法 实例及资料收集 准备工作 首先,安装MySQL,配置用户名和密码,创建数据库. 可参见之前的文章: http://www.cnblogs.com/mengdd/p/315 ...

  6. mysql多实例的配置和管理

    原文地址:mysql多实例的配置和管理 作者:飞鸿无痕 多实例mysql的安装和管理 mysql的多实例有两种方式可以实现,两种方式各有利弊.第一种是使用多个配置文件启动不同的进程来实现多实例,这种方 ...

  7. MySQL多实例,主从同步

    由于背景原因,所做的主从同步还是要基于MySQL 5.1的版本,主从同步主要是一个数据库读写访问原来的数据库热度过大,需要做到使用从库对读分压. MySQL主从同步介绍     MySQL 支持单双向 ...

  8. mysql多实例(个人的情况,不是大众的)里面有配置好的脚本+主从复制

    [root@DB-S ~]# ll /usr/local/|grep mysql lrwxrwxrwx. 1 root root 21 Jun 14 01:52 mysql -> /alidat ...

  9. mysql多实例部署

    mysql 多实例常规来讲,主要有二种方案可以实现,这二种方案各有利弊,如下:1.基于多配置文件 通过使用多个配置文件来启动不同的进程,以此来实现多实例. 优点:逻辑简单,配置简单 缺点:管理起来不方 ...

随机推荐

  1. Python【第十篇】协程、异步IO

    大纲 Gevent协程 阻塞IO和非阻塞IO.同步IO和异步IO的区别 事件驱动.IO多路复用(select/poll/epoll) 1.协程 1.1协程的概念 协程,又称微线程,纤程.英文名Coro ...

  2. SQL的四种语言和数据库范式

    1. SQL的四种语言 DDL(Data Definition Language)数据库定义语言 CREATE ALTER DROP TRUNCATE COMMENT RENAME DML(Data ...

  3. flash player over linux

    flashplayer官方网址:https://get.adobe.com/cn/flashplayer/ flash插件安装方法一(适用于ubuntu等linux系统):               ...

  4. Silverlight中在MVVM模式下对DatagridRow选择控件封装

    在项目中,凡是涉及到表格的地方用的最多的控件,自然少不了DataGrid的身影,它明了的展示各种数据让人十分喜欢.现在要实现一个功能,使DataGrid具有全选和项选中的功能,如果在传统后台代码中完成 ...

  5. Scroll view 备忘

    Stroyboard中使用ScrollView 当我们使用Storyboard开发项目时,如果要往控制器上拖入一个ScrollView并且添加约束设置滚动区域,是有特殊的规定的: 拖入一个scroll ...

  6. log4j源码阅读

    基于log4j1.2.17的源代码阅读 org.apache.log4j.xml.DOMConfigurator 类是log4j的xml配置文件初始化类 org.apache.log4j.Proper ...

  7. 运行时改变控件的大小(点击后立刻ReleaseCapture,然后计算位移,最后发消息改变位置)——最有趣的是TPanel其实也有窗口标题,因此可发HTCAPTION消息

    //光标在控件不同位置时的样式 // 由于拐角这点手动精确实在困难 所以用范围 范围+3 这样很容易就找到这一点了 procedure CtrlMouseMove(Ctrl: TWinControl; ...

  8. Eclipse构建Activiti项目,类导入提示功能不能使用

    Eclipse新建一个新的Activiti项目(Activiti项目默认使用Maven管理项目),接着配置好pom.xml添加需要的jar包依赖,引入依赖之后发现在测试类中没有提示导入所需要的包的选项 ...

  9. 重构第四天 : 用多态替换条件语句(if else & switch)

    面相对象的一个核心基础就是多态,当你要根据对象类型的不同要做不同的操作的时候,一个好的办法就是采用多态,把算法封装到子类当中去. 重构前代码: public abstract class Custom ...

  10. 《Apache Spark源码剖析》

    Spark Contributor,Databricks工程师连城,华为大数据平台开发部部长陈亮,网易杭州研究院副院长汪源,TalkingData首席数据科学家张夏天联袂力荐1.本书全面.系统地介绍了 ...