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 连 mongodb

    这几天在学习Python Web开发,于是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样的好玩意儿,何必还自己造车呢?决定使用Tornado这个框架,然后数据库方面决定顺便 ...

  2. highcharts-Highmaps 动态传入城市名称

    做前端按地区(地图)分布监控数据展示用了 HIGHMAPS JAVASCRIPT MAPS 控件,很好很强大. 基础实现是这样的:调用插件动态传入需要展示的数据(data),插件会在地图数据(mapd ...

  3. uitableview的空白处不能响应 touchesbegan 事件

    现在的uitableview 的上面  响应不了     touchesbegan 事件   可能算是苹果的一个bug吧,不知道以后会不会改变 今天试了好久  都不行  最后  写了个字类  继承自 ...

  4. Uva_11722 Joining with Friend

    题目链接 题意: 两个人坐火车, 在某个城市到站的时间段分别为[t1, t2] , [s1, s2],停在站台的时间均为w. 问, 若两人能见面的概率. 思路: 一道基础的几何概型, p = s(m) ...

  5. 精确到时分秒的jQuery插件例子

    demo.html: <!DOCTYPE html> <html> <head>  <meta http-equiv="Content-Type&q ...

  6. bzoj1391

    很像最大权闭合子图的题目s向每个工作连边,流量为收益每个工序,由工作i向对应机器连边,流量为租用费每个机器向t连边,流量为购买费显然跑最小割,ans=总收益-mincut ; type node=re ...

  7. Maven学习(2) - Maven构建多模块Java工程

    概述 项目开发时,通常会将项目分为多个模块进行开发,本文讨论如何用Maven构建多模块的Java工程. 软件环境 Java:1.6.0_26 Maven:3.1.1 OS:WindowXP SP3 项 ...

  8. Linux学习笔记11——文件I/O之二

    一.文件共享 内核使用三种数据结构表示打开的文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响. 1.每个进程在进程表中都有一个记录项,记录项中包含有一张打开文件描述表 2.内 ...

  9. jQuery 遍历

    .add() add() 方法将元素添加到匹配元素的集合中 .add(selector)//字符串值,表示查找供添加到匹配元素集合的元素的选择器表达式. .add(elements)//添加到匹配元素 ...

  10. [Unix.C]文件I/O

    大多数unix文件I/O操作只需要用到5个函数:open.read.write.lseek和close.此处所说明的函数均为不带缓存的I/O操作(下同).不带缓存指的是每个read和write都调用内 ...