您好,欢迎访问一九零五行业门户网

MySQL存储过程中捕获异常的方法

declare处理程序的使用: declare handler_type handler for condition_value[,...] sp_statement 其中, handler_type的取值范围:continue | exit | undo condition_value的取值范围:sqlstate [value] sqlstate_value | condition_name | sqlwarning | not
declare处理程序的使用:
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
这个语句指定每个可以处理一个或多个条件的处理程序。如果产生一个或多个条件,指定的语句被执行。 对一个continue处理程序,当前子程序的执行在执行处理程序语句之后继续。对于exit处理程序,当前begin...end复合语句的执行被终止。undo 处理程序类型语句还不被支持。
·   sqlwarning是对所有以01开头的sqlstate代码的速记。
·    not found是对所有以02开头的sqlstate代码的速记。
·    sqlexception是对所有没有被sqlwarning或not found捕获的sqlstate代码的速记。
注:除了sqlstate值,mysql错误代码也不被支持。
例:
delimiter $$create table `_t1` ( `id` int(11) not null auto_increment, `val1` varchar(20) default null, `val2` int(11) default null, primary key (`id`)) engine=innodb auto_increment=113 default charset=latin1$$
delimiter $$create definer=`abandonship`@`%` procedure `p_testexception`()begin declare _var,_err int default 0; declare continue handler for sqlexception, sqlwarning, not found set _err=1; insert into _t1(val1, val2) value(2012,'abandonship'); if _err=1 then set _var = 2; end if; select case when _var = 2 then '出错了' else _var end;end
调用该存储过程将返回:出错了
其它类似信息

推荐信息