初めてストアドプロシージャとカーソルを作成しようとしていますが、期待どおりに動作していません。すべてが正常に実行されますが、出力データは正しくありません。手動で繰り返すと、期待どおりの結果が得られますが、ストアドプロシージャでは得られません。
以下の出力テーブルを見ると、最初の3つのレコードは正しく、後続のすべてのエントリのGIDは正しいですが、PTSの要約は正しくなく、同じ値を繰り返しています。
手順:
DELIMITER //
CREATE PROCEDURE creategamesummary()
BEGIN
DECLARE curdone TINYINT DEFAULT 0;
DECLARE curgid INT;
DECLARE curwk INT;
DECLARE gamescursor CURSOR
FOR
SELECT g1.GID FROM games g1 WHERE g1.SEAS = 2008 AND g1.WK > 4 AND (g1.V = 'BAL' OR g1.H = 'BAL') ORDER BY GID;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET curdone=1;
OPEN gamescursor;
REPEAT
FETCH gamescursor into curgid;
SET curwk = (SELECT WK FROM games WHERE GID = curgid);
REPLACE INTO gamesummary
SELECT
curgid as GID,
SUM(t1.PTS) as PTS
FROM
team t1
WHERE
t1.GID IN (
SELECT
g2.GID
FROM
games g2
WHERE
(g2.V = 'BAL' OR
g2.H = 'BAL') AND
g2.SEAS = 2008 AND
g2.WK <= curwk
) AND t1.TNAME = 'BAL';
UNTIL curdone END REPEAT;
CLOSE gamescursor;
END//
DELIMITER ;
出力テーブル:
GID,PTS
2182,75
2196,78
2212,105
2223,127
2240,127
2259,127
2268,127
2288,127
2306,127
2327,127
2330,127
2346,127
2371,127
2379,127
2381,127
2385,127