MySQL数据库的例外处理测试_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2183 | 回复: 0   主题: MySQL数据库的例外处理测试        下一篇 
tk
注册用户
等级:中士
经验:207
发帖:80
精华:0
注册:2011-10-19
状态:离线
发送短消息息给tk 加好友    发送短消息息给tk 发消息
发表于: IP:您无权察看 2015-5-27 14:15:21 | [全部帖] [楼主帖] 楼主

针对存储过程 、触发器或函数内部语句可能发生的错误或警告信息,需要进行相关异常或称 例外的捕捉,然后作出相应的处理,简单地做了相关的测试,详细信息如下:

USE TEST;
CREATE TABLE `eugene` (
`ID` int(11) NOT NULL,
PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
delimiter $$
DROP PROCEDURE IF EXISTS `test`.`handlerdemo`$$
CREATE PROCEDURE handlerdemo ()
BEGIN
DECLARE X2 INT;
DECLARE CONTINUE HANDLER FOR SQLWARNING       SET X2= 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND             SET X2 = 2;
DECLARE CONTINUE HANDLER FOR SQLSTATE ’23000′    SET X2= 3;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION     SET X2 = 4;
INSERT INTO  eugene  VALUES (X2);
SELECT X2;
END;
$$


执行完上面的代码后,你可以反复执行:

CALL handlerdemo ()


看显示的结果是什么?
第一次运行,肯定为 NULL;
第二次运行,肯定为 3;

然后再修改存储过程,把存储过程中的代码:DECLARE CONTINUE HANDLER FOR SQLSTATE ’23000′    SET X2= 3;注释掉,在之前的基础上再次执行:

CALL handlerdemo ()


发现运行后的结果为 4;

剩下的SQLWARNING,NOT FOUND也类似,下面介绍下各自发挥的作用:
SQLWARNING是对所有以01开头的SQLSTATE代码的速记。(这个我自己的存储过程中还没用到过)
NOT FOUND是对所有以02开头的SQLSTATE代码的速记。(例如:游标产生的SQLSTATE=02000)
SQLEXCEPTION是对所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE代码的速记。(相当于Oracle中写例外处理的when ….else 中的else作用)。
SQLSTATE—-就是触发的错误代码编号,示例中的23000表示,当向eugene表中主键写入重复的值的时候,将会引发一个语法错误,错误编码就是23000,这个时候就会执行其后的语句:SET X2= 3。

官网上的语法:

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


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论