从网上找到所有的相关内容几乎都是说sql语句的执行顺序不对,但是我运行的只是一个function:
DELIMITER //
#计算学生的平均成绩
DROP FUNCTION IF EXISTS GPA;
CREATE FUNCTION GPA(sID CHAR(3))
RETURNS FLOAT
READS SQL DATA
BEGIN
DECLARE state INT DEFAULT 0;
DECLARE grade, credit, total_g, total_c, gpa FLOAT DEFAULT 0;
DECLARE
cursor_ CURSOR FOR
(SELECT Score, CourseCredit From Grade, Course WHERE Grade.studentID = sID AND Course.CourseID = Grade.CourseID);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET state = 1;
OPEN cursor_;
REPEAT
FETCH cursor_ INTO grade, credit;
IF state = 0 THEN
SET total_g = total_g + grade*credit;
SET total_c = total_c + credit;
END IF;
UNTIL state = 1
END REPEAT;
CLOSE cursor_;
SET gpa = total_g/total_c;
RETURN gpa;
END //
DELIMITER ;
后来发现解决方法:把“DROP FUNCTION IF EXISTS GPA;”最后的分号改成"//"

5831

被折叠的 条评论
为什么被折叠?



