mysql存储函数,游标的使用过程中异常捕捉机制

drop procedure if exists p2;
delimiter $$
create procedure p2()
--创建一个函数
begindeclare row_player_guid int ;--定义一个变量用来接收游标返回的值
declare done int default false;--定义一个值,用来判定循环的状态,ture就跳出循环
declare get cursor for select distinct(player_guid) from p_task;
declare exit handler for not found set done=true;--异常捕捉,
declare continue handler for 1062 set @info='Duplicate entry';--异常捕捉continue为忽略这个错误继续执行
open get;--打开游标read_loop: LOOP--创建循环遍历结果集(创建游标时定义的)
fetch get into row_player_guid;--将遍历的结果赋值给row_player_guid
IF done THEN--游标结束的条件
LEAVE read_loop;
END IF;--游标结束的条件也可以不加,不加的话需要把异常捕捉的continue换成exit
--想要在循环内做的事情
select row_player_guid,done; 
END LOOP;   
close get;  --关闭游标
end $$
delimiter;

DECLARE handler_type HANDLER FOR condition_value [,...] sp_statement
handler_type: CONTINUE|EXIT|UNDO
--handler_type为错误处理方式,参数为3个值之一;
--CONTINUE表示遇到错误不处理,继续执行;
--EXIT表示遇到错误时马上退出;
--举例:
//方法一:捕获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';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值