MySql存储过程游标遍历结果集

创建存储过程:​​​​​​​

#判断存储过程是否存在,存在删除
DROP PROCEDURE IF EXISTS toCard;
CREATE DEFINER=`root`@`%` PROCEDURE `toCard`()
BEGIN
	#声明结束标识
	DECLARE end_flag int DEFAULT 0;
	#变量
	DECLARE userId,cardThird bigint;
	DECLARE cardHex,leftCard,rightCard,ecardNum VARCHAR(10);
	
	#声明游标 user_curosr,将sql结果集赋值到游标中
	DECLARE user_curosr CURSOR FOR SELECT id,ecardNumThird FROM u_user WHERE ecardNumThird IS NOT NULL AND ecardNumThird!='';
	
	#设置终止标识
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET end_flag=1;
	
	#打开游标
	OPEN user_curosr;
	
	#遍历游标
	REPEAT
	
		#获取当前游标指针记录,取出值赋给自定义的变量,注:变量名不要与sql返回的列名相同,变量顺序要和sql结果列的顺序一致
		FETCH user_curosr INTO userId,cardThird;
			SET cardHex=CONV(LEFT(cardThird, 8), 10, 16);
			SET leftCard= CONV(LEFT(LPAD(cardHex,8,0) , 4), 16, 10);
			SET rightCard= CONV(RIGHT(LPAD(cardHex,8,0) , 4), 16, 10);	
			SET ecardNum=LPAD(CONCAT(leftCard,rightCard),8,0);
			#输出结果
			#SELECT userId,cardThird,cardHex,leftCard,rightCard,ecardNum;
			#利用取到的值进行数据库的操作
			UPDATE u_user SET ecardNum=ecardNum WHERE id=userId;
	
	# 根据 end_flag 判断是否结束
	UNTIL end_flag END REPEAT;
	
	#关闭游标
	close user_curosr;

END

执行存储过程:

call toCard();

内包含wiegand26卡号转换协议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亿码当先

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值