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

xiaoxiao2021-02-28  78

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';
转载请注明原文地址: https://www.6miu.com/read-77609.html

最新回复(0)