这个mysql语法中的错误是什么?

时间:2014-09-10 17:54:26

标签: mysql sql stored-procedures

我对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行

任何人都可以帮助我吗?什么是错误?

2 个答案:

答案 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;