CREATE DEFINER=`mycommcrm`@`%` PROCEDURE `myadmin_update_transfer_college`(in contractCode varchar(30))
BEGIN
#系统管理员删除转案及之后的全部记录
DECLARE newCollegeId varchar(64) default '';
DECLARE oldCollegeId varchar(64) default '';
-- 声明一个标志done, 用来判断游标是否遍历完成
DECLARE ifEnd int DEFAULT false;
DECLARE t_error INTEGER DEFAULT 0;
-- 查询正在换校的数据
DECLARE jjl_college_curs cursor for (select id,is_change_before_id from jjl_college_apply where contract_code =contractCode and is_now_flag='2');
-- 在游标循环到最后会将 done 设置为 1
DECLARE CONTINUE HANDLER FOR not found SET ifEnd = true;
-- 异常时设置为1
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
#开启事物
START TRANSACTION;
#打开游标
open jjl_college_curs;
-- 循环遍历
read_loop: LOOP
-- 提取游标数据
fetch jjl_college_curs into newCollegeId,oldCollegeId;
-- 判断是否退出循环
IF ifEnd THEN
LEAVE read_loop;
END IF;
-- 业务代码
select newCollegeId from dual;
-- 关闭循环
end Loop;
#关闭游标
close jjl_college_curs;
-- 结束事物
IF t_error = 1 THEN
ROLLBACK; -- 事物回滚
ELSE
COMMIT; -- 事物提交
END IF;
END
转载跳转原文