15.存储过程生产环境应用综合示例详解

来源:网易云课堂《精通MySQL存储过程、函数和触发器》课程

讲师:huangxifeng607(黄锡峰)


笔记


(1)存储过程需求分析

生产场景描述:

1.在游戏中,每个账号(accountid)可以最多5个角色(characterid)。角色表:t_game_character

2.5个角色放到一定的槽位(slot)中,槽位值必须是0-4,不能有相同的槽位,否则在游戏中就无法正常看到所有角色。

3.两个游戏分区合服,合服之后每个账号按规则删除只剩下5个角色,但槽位值可能有重复的。


实现需求:同一个账号有多个角色有重复槽位值,需要重置槽位值,使其值在0-4且不重复。


实现难点:有多个账号accountid,多个账号下又有多个角色。

  多个账号使用一个循环,每个账号下多个角色又使用循环,即使用嵌套循环。

  多个账号使用游标来实现,每个账号下多个角色又使用嵌套游标来实现。


create procedure procharslot()
begin
	declare AID int;
	declare stopflag int default 0;
	declare curacc cursor for select accountid from reset_slot_accountid;
	declare continue handler for not found set stopflag=1;
	open curacc;
	repeat
	fetch curacc into aid;
	begin
		declare Cid int;
		declare CSlot int;
		declare done int default 0;
		declare CurChar cursor from select characterid from t_game_character where accountid=AID;
		declare continue handler for not found set done=1;
		set CSlot=0;
		open CurChar;
		fetch CurChar into Cid;
		while(done=0) do
			begin
				update t_game_character set CharSlot=CSlot where characterid=Cid;
				set CSlot=CSlot+1;
				fetch CurChar into Cid;
			end;
		end while;
		close CurChar;
	end;
	until stopflag=1 end repeat;
	close curacc;
end;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值