2014-09-10 2 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« Первый класс почестей »; DECLARE sUpper CHAR (34) DE 'по строке 7

Может ли кто-нибудь помочь мне здесь? Какая ошибка?

+1

[DECLARE разрешено только внутри инструкции BEGIN ... END и должно быть в начале, перед любыми другими утверждениями.] (Http://dev.mysql.com/doc/refman/5.0/en/declare .html) –

+0

ah, thanx mate :) –

ответ

3

Все ваши заявления DECLARE должны быть в начале, перед любыми SET или другими словами.

1

Декларации должны быть сразу после блока BEGIN. В вашем случае просто переместите -> DECLARE FClass CHAR (18) DEFAULT «Почетный класс первого класса»; -> DECLARE sUpper CHAR (34) ПО УМОЛЧАНИЮ «Почетный класс второго класса»; -> DECLARE sLower CHAR (34) ПО УМОЛЧАНИЮ «Почетный класс второго класса»; -> DECLARE tClass CHAR (18) ПО УМОЛЧАНИЮ «Награды третьего класса»; и DECLARE GPA = DECIMAL; до -> SET count = 1; -> SET max = 10;

+0

Спасибо @Hammy –

Смежные вопросы