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

来源:互联网 发布:centos下载教程 编辑:程序博客网 时间:2024/06/05 03:44
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_guidIF 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_statementhandler_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';