1. 程式人生 > >15.儲存過程生產環境應用綜合示例詳解

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;