我对mysql世界很新。我试图通过他/她的GPA创建一个程序来决定学生的班级。我给了他们一个当时1到10的CRegNo。这是我的代码:
mysql> delimiter //
mysql> CREATE PROCEDURE DecideClass ()
-> BEGIN
-> DECLARE count INT;
-> DECLARE max INT;
-> SET count = 1;
-> SET max = 10;
-> DECLARE FClass CHAR(18) DEFAULT 'First class honors';
-> DECLARE sUpper CHAR(34) DEFAULT 'Second class honors-upper division';
-> DECLARE sLower CHAR(34) DEFAULT 'Second class honors-lower division';
-> DECLARE tClass CHAR(18) DEFAULT 'Third class honors';
-> WHILE count <= max DO
-> DECLARE GPA DECIMAL(3,2);
-> SET GPA = (SELECT GPA FROM STUDENT WHERE CRegNo = count);
-> IF GPA >= 3.7 THEN
-> UPDATE STUDENT SET Class = FClass WHERE CRegNo = count;
-> ELSE IF GPA < 3.7 AND GPA >= 3.3 THEN
-> UPDATE STUDENT SET Class = SUpper WHERE CRegNo = count;
-> ELSE IF GPA < 3.3 AND GPA >= 2.7 THEN
-> UPDATE STUDENT SET Class = SLower WHERE CRegNo = count;
-> ELSE IF GPA < 2.7 AND GPA >= 2.0 THEN
-> UPDATE STUDENT SET Class = TClass WHERE CRegNo = count;
-> END IF
-> SET count = count + 1;
-> END WHILE;
-> END;
-> //
然后它说
错误1064(42000):您的SQL语法有错误;检查 手册,对应右边的MySQL服务器版本 在'DECLARE FClass CHAR(18)DEFAULT&#39; First class附近使用的语法 荣誉&#39 ;; DECLARE sUpper CHAR(34)DE&#39;在第7行
任何人都可以帮助我吗?什么是错误?
答案 0 :(得分:3)
您的所有DECLARE
语句必须位于任何SET
或其他任何内容之前的开头。
答案 1 :(得分:1)
声明必须在BEGIN块之后。在你的情况下,只需移动 - &GT; DECLARE FClass CHAR(18)DEFAULT'头等荣誉'; - &GT; DECLARE sUpper CHAR(34)DEFAULT'二级荣誉 - 上级'; - &GT; DECLARE sLower CHAR(34)默认'二级荣誉 - 下级'; - &GT; DECLARE tClass CHAR(18)默认'三等荣誉'; 和 DECLARE GPA = DECIMAL; 之前 - &GT; SET count = 1; - &GT; SET max = 10;