안녕하세요.
다음처럼 프로시져를 만들어서 전체 레코드를 대상으로 값을 수정하려고 하는데요.
UPDATE query 부분이 아무래도 비효율적인 것 같습니다.
현재 커서를 이용해서 그 row를 변경하고 싶은데요 방법이 없을까요?
CREATE PROCEDURE `RemoveAutoHuntOption`()
BEGIN
DECLARE cname VARCHAR (12);
DECLARE huntopt1 VARCHAR (81);
DECLARE huntopt2 VARCHAR (81);
DECLARE done INT DEFAULT (0);
DECLARE dirty INT DEFAULT (0);
DECLARE cur CURSOR FOR SELECT aName, aAutoConfig FROM ts2_gamedb.AvatarInfo;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
CREATE TEMPORARY TABLE dummy (
aName VARCHAR (12),
aHuntOpt1 VARCHAR (81),
aHuntOpt2 VARCHAR (81)
);
OPEN cur;
REPEAT
FETCH cur INTO cname, huntopt1;
IF NOT done THEN
SET dirty = STRCMP (RIGHT (LEFT (huntopt1, 66), 15), '000000000000000');
IF dirty <> 0 THEN
SET huntopt2 = CONCAT (RPAD (LEFT (huntopt1, 51), 66, '0'), RIGHT (huntopt1, 15));
UPDATE ts2_gamedb.AvatarInfo SET aAutoConfig = huntopt2 WHERE aName = cname;
INSERT INTO dummy VALUES (cname, huntopt1, huntopt2);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur;
SELECT * FROM dummy;
DROP TABLE dummy;
END;
즐거운 하루 되세요.
|