안녕하세요
mysql에서 프로시져를 이용하고있습니다.
커서를 이용해서 해당데이터를 select 된 데이터를 가공해서 다시 recodeset을 내려주고싶습니다.
아무리 방법을 찾아봐도 나오지가 않습니다.
배열같은걸 사용하면 좋을텐데 가능한지요??
아래 소스 첨부합니다.
DELIMITER $$
DROP PROCEDURE IF EXISTS `SP_GAME_ITEM_DROP_RATING`$$
CREATE PROCEDURE `SP_DROP_RATING`(IN _IN_AREA_CODE INT, IN _IN_REQITEMCODE INT, IN _IN_MSEQ INT)
READS SQL DATA
BEGIN
DECLARE _IS_QUEST_ITEM INT DEFAULT 0;
DECLARE _IS_WISHLIST_ITEM INT DEFAULT 0;
DECLARE _IS_COMPASS_USED INT DEFAULT 0;
DECLARE _SET_QUEST_ITEM_BONUS_RATE INT DEFAULT 0;
DECLARE _SET_WISH_ITEM_BONUS_RATE INT DEFAULT 1;
DECLARE _ITEM_ID INT DEFAULT 0 ;
DECLARE _ITEM_DEFAULT_DROP_RATE INT DEFAULT 0;
DECLARE _QUEST_ITEM_REQ_MAXCNT INT DEFAULT 0;
DECLARE _QEUST_ITEM_CURR_CNT INT DEFAULT 0;
DECLARE _done INT DEFAULT 0;
DECLARE drop_list_csr CURSOR FOR
SELECT
Item_Id,Compass01,Quest_Item,
Quest_ItemMaxReqCnt,
Quest_ItemCurrCnt
FROM DROP_LIST
WHERE Area =_IN_AREA_CODE;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done=1;
SET @_ITEM_ID = 0;
SET @_ITEM_DEFAULT_DROP_RATE = 0;
SET @_SET_QUEST_ITEM_BONUS_RATE = 0;
OPEN drop_list_csr;
DROP_LIST: LOOP
FETCH drop_list_csr INTO _ITEM_ID, _ITEM_DEFAULT_DROP_RATE, _IS_QUEST_ITEM, _QUEST_ITEM_REQ_MAXCNT, _QEUST_ITEM_CURR_CNT ;
IF _done = 1 THEN
LEAVE DROP_LIST;
END IF;
IF _IS_QUEST_ITEM = 1 AND _QUEST_ITEM_REQ_MAXCNT > _QEUST_ITEM_CURR_CNT AND _IN_AREA_CODE = 1 THEN
SET _SET_QUEST_ITEM_BONUS_RATE = 5;
ELSEIF _IS_QUEST_ITEM = 1 AND _QUEST_ITEM_REQ_MAXCNT > _QEUST_ITEM_CURR_CNT AND _IN_AREA_CODE = 2 THEN
SET _SET_QUEST_ITEM_BONUS_RATE = 4;
ELSEIF _IS_QUEST_ITEM = 1 AND _QUEST_ITEM_REQ_MAXCNT > _QEUST_ITEM_CURR_CNT AND _IN_AREA_CODE >= 3 THEN
SET _SET_QUEST_ITEM_BONUS_RATE = 3;
ELSE
SET _SET_QUEST_ITEM_BONUS_RATE = 0;
END IF;
SET @_ITEM_ID = _ITEM_ID;
SET @_ITEM_DEFAULT_DROP_RATE = _ITEM_DEFAULT_DROP_RATE;
SET @_SET_QUEST_ITEM_BONUS_RATE = _SET_QUEST_ITEM_BONUS_RATE;
SELECT @_ITEM_ID, @_ITEM_DEFAULT_DROP_RATE, @_SET_QUEST_ITEM_BONUS_RATE;
END LOOP DROP_LIST;
CLOSE drop_list_csr;
END$$
DELIMITER ; |