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

来源:互联网 发布:java 返回前台值换行 编辑:程序博客网 时间:2024/05/21 17:07

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

讲师:huangxifeng607(黄锡峰)


笔记


(1)存储过程需求分析

生产场景描述:

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

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

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


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


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

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

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


create procedure procharslot()begindeclare 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;repeatfetch curacc into aid;begindeclare 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) dobeginupdate 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;




原创粉丝点击