【发布时间】:2014-08-11 03:03:27
【问题描述】:
我是处理存储过程的新手,我正在尝试设置一组复杂的查询来为我更新一些统计信息。问题是它说语法不正确,但我不知道为什么。它看起来像我能找到的所有其他示例。有人可以指出我正确的方向吗?
我得到的错误是这一行的语法错误:FETCH curs INTO @qqId;
我的整个代码:
DELIMITER //
CREATE PROCEDURE QuestionStatistics(IN quizId INT(11))
BEGIN
DECLARE bDone INT;
DECLARE curs CURSOR FOR SELECT qqId FROM quizQuestions WHERE qqQuizId = quizId;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1;
OPEN curs;
SET bDone = 0;
REPEAT
FETCH curs INTO @qqId; <-- Error here
SELECT COUNT(*)
FROM quizAnswers
WHERE qaQuizQuestionId = @qqId
AND qaIsMarked = 1
INTO @totalAnswers;
SELECT COUNT(*)
FROM quizAnswers
WHERE qaQuizQuestionId = @qqId
AND qaCorrect = 1
INTO @totalCorrect;
SELECT SUM(qaValue)
FROM quizAnswers
WHERE qaQuizQuestionId = @qqId
AND qaIsMarked = 1
INTO @totalValue;
UPDATE quizQuestions
SET qqAveragePoints = ROUND(@totalValue / @totalAnswers, 2),
qqPercentageCorrect = ROUND(100 * @totalCorrect / @totalAnswers)
WHERE qqId = @qqId;
UNTIL bDone END REPEAT;
CLOSE curs;
END//
DELIMITER ;
我对这段代码的最初灵感来自this answer here 中的代码。
【问题讨论】:
标签: mysql loops stored-procedures cursor