存储过程-批量修改记录笔记

存储过程-笔记


原博客地址:https://blog.csdn.net/kst1024/article/details/103067745

仅学习使用,不建议使用这种方法批量更新数据。原因请小伙伴们搜索一下存储过程和游标的优缺点。

DROP PROCEDURE IF EXISTS fix_receipt_time;

-- 将结束符换为//,为了避免语法错误
DELIMITER //
-- 创建存储过程
CREATE PROCEDURE fix_receipt_time()
begin
	-- 定义变量
	DECLARE s int DEFAULT 0;
	DECLARE target_credit_record_id int(11);
	DECLARE target_receipt_time TIMESTAMP;
	-- 定义游标,并将sql结果集赋值到游标中
	DECLARE credit_record_cursor CURSOR FOR SELECT cr.id,sr.receipt_time FROM tb_credit_record cr JOIN tb_service_record sr on sr.id = cr.service_record_id   WHERE cr.receipt_time is NULL ;
	-- 声明当游标遍历完后将标志变量置成某个值
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;
		-- 打开游标
		open credit_record_cursor;
			-- 将游标中的值赋值给变量,注意:变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致
			fetch credit_record_cursor into target_credit_record_id,target_receipt_time;
			-- 当s不等于1,也就是未遍历完时,会一直循环
			while s<>1 do
				-- 执行业务逻辑
				UPDATE tb_credit_record SET receipt_time = target_receipt_time WHERE id = target_credit_record_id;
				-- 将游标中的值再赋值给变量,供下次循环使用
				fetch credit_record_cursor into target_credit_record_id,target_receipt_time;
			-- 当s等于1时表明遍历以完成,退出循环
			end while;
		-- 关闭游标
		close credit_record_cursor;
end;
//
-- 将结束符换回;
DELIMITER ;

-- 执行存储过程
call fix_receipt_time()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值