2014-09-10 27 views
0

我是MySQL的新天地。我试图创建一个程序来决定他/她的GPA的学生的班级。我给了他们一个CRegNo,这个时间是1到10。这里是我的代码:这个mysql语法中的错误是什么?

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; 
    -> // 

然后它说,

ERROR 1064(42000):你在你的SQL语法错误;查看 手册,该手册对应于您的MySQL服务器版本右边的 语法,以便在'DECLARE FClass CHAR(18)DEFAULT'First class honors'附近使用; DECLARE sUpper CHAR(34)DE'at line 7

任何人都可以帮我解决这个问题吗?错误是什么?

+1

[DECLARE仅在BEGIN ... END复合语句中被允许,并且必须在其开始之前,在任何其他语句之前。](http://dev.mysql.com/doc/refman/5.0/en/declare .html) – 2014-09-10 18:02:32

+0

啊,thanx队友:) – 2014-09-10 18:03:47

回答

3

你所有的DECLARE声明必须在开始之前,在任何SET之前或其他。

1

声明必须在BEGIN块之后。在你的情况下,只需移动 - > DECLARE FClass CHAR(18)DEFAULT'头等荣誉'; - > DECLARE sUpper CHAR(34)DEFAULT'二等荣誉 - 高等师'; - > DECLARE sLower CHAR(34)DEFAULT'二等荣誉下师'; - > DECLARE tClass CHAR(18)DEFAULT'三等荣誉'; 和 DECLARE GPA = DECIMAL; 之前 - > SET count = 1; - > SET max = 10;

+0

谢谢@Hammy – 2014-09-10 18:19:17