之前的博客文章
MySQL上存储过程和触发器的一个实例 -- 为注册新玩家赠送avatar item
里写过对于所有的注册玩家都发放avatar Item的例子。但是免费的午餐不会一直都有,注册就免费送的活动结束以后,还是要手式挑选出符合条件的玩家,进行avatar item的发放工作。这里接着MySQL上存储过程和触发器的一个实例 -- 为注册新玩家赠送avatar item
的思路,做了一个针对指定玩家(按用户名)发放avatar Item的存储过程:相关的数据表结构请参阅MySQL上存储过程和触发器的一个实例 -- 为注册新玩家赠送avatar item
首先来看主的给avatar item的存储过程:
DROP PROCEDURE IF EXISTS IssueAvatarItems;
CREATE PROCEDURE IssueAvatarItems (IN PlayerName VARCHAR(20), OUT ResultString VARCHAR(100))
BEGIN
DECLARE Gender int;
DECLARE AID int;
DECLARE RCount int;
SELECT 'Start processing player info...' into ResultString;
SELECT Account.AccountID into AID from Account where UserName = PlayerName;
/*Get the accountID from the player's username*/
SELECT FOUND_ROWS() into RCount;
IF (RCount=0) THEN # if there is no such player with the username
SELECT CONCAT('The player \'',PlayerName,'\' is not found in GameDB!') INTO ResultString;
ELSE
SELECT DISTINCT CharacterAttr.Gender INTO Gender FROM CharacterAttr, GameCharacter
WHERE CharacterAttr.CharacterID = GameCharacter.CharacterID
AND GameCharacter.AccountID= AID;
IF (Gender =0) THEN # it is a Male
CALL IssueMaleAvatarItem(AID);
ELSEIF (Gender =1) THEN # if it is a Female
CALL IssueFemaleAvatarItem(AID);
END IF;
SELECT ItemID from PlayerItem WHERE AccountID= AID;/*Checking inserting results*/
SELECT FOUND_ROWS() into RCount;
IF (RCount>5) THEN
SELECT CONCAT('Player: \'',PlayerName, '\' has been successfully given ',RCount,' Avatar Items!') INTO ResultString;
ELSE
SELECT CONCAT('Player: \'',PlayerName, '\' has errors in issuing av