http://www.2cto.com/database/201410/341132.html
自定义异常处理
例子:
DECLARE CONTINUE HANDLER FOR NOT FOUND SET V_NOT_FOUND = 1;
插入的时候出现not found的情况 设置变量 V_NOT_FOUND = 1,程序继续。
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN
SET @sys_code=-1,@sys_message='未知错误';
ROLLBACK;
RESIGNAL;
END;
如果出现sql异常,用sql块,@sys_code= -1,@sys_message= ‘未知错误’,并且回滚,还要用resignal报错一起执行。resignal下一篇文章中说明。
DECLARE 处理方法类型 HANDLER FOR SQL异常类型 处理方法
处理方法类型:CONTINUE、EXIT、UNDO(mysql不支持,所以可以用上面的方法,回滚)
SQL异常类型:6种
处理方法:自行定义
SQL异常类型
//方法一:捕获sqlstate_value异常
//这种方法是捕获sqlstate_value值。如果遇到sqlstate_value值为"42S02",执行CONTINUE操作,并输出"NO_SUCH_TABLE"信息
DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' SET @info='NO_SUCH_TABLE';
//方法二:捕获mysql_error_code异常
//这种方法是捕获mysql_error_code值。如果遇到mysql_error_code值为1146,执行CONTINUE操作,并输出"NO_SUCH_TABLE"信息;
DECLARE CONTINUE HANDLER FOR 1146 SET @info='NO_SUCH_TABLE';
//方法三:先定义条件,然后捕获异常
DECLARE no_such_table CONDITION FOR 1146;
DECLARE CONTINUE HANDLER FOR NO_SUCH_TABLE SET @info='NO_SUCH_TABLE';
//方法四:使用SQLWARNING捕获异常
DECLARE EXIT HANDLER FOR SQLWARNING SET @info='ERROR';
//方法五:使用NOT FOUND捕获异常
DECLARE EXIT HANDLER FOR NOT FOUND SET @info='NO_SUCH_TABLE';
//方法六:使用SQLEXCEPTION捕获异常
DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info='ERROR';