2014-09-30 2 views
1

Я искал 20 минут, почему я получил эту ошибку в mySql, но не смог найти ответ.Ошибка синтаксиса Mysql Stranger # 1064

«# 1064 - У Вас есть ошибка в вашем синтаксисе SQL, проверьте руководство, которое соответствует Вашей версии сервера MySQL для правого синтаксиса использовать вблизи„“на линии 5»

Вот блок кода в вопрос:

CREATE PROCEDURE marouri_insert_users_emails() 

BEGIN 

DECLARE a INT; 
DECLARE b char(16); 
DECLARE cur1 CURSOR FOR SELECT id,name FROM glpi_users; 

OPEN cur1; 

read_loop: LOOP 
FETCH cur1 INTO a,b; 

IF a > 6 THEN 
    INSERT INTO glpi_useremails(users_id,is_default,is_dynamic,email) VALUES (a,1,0,CONCAT(b, '@alomrane.ma'); 
END IF; 
END LOOP; 
CLOSE cur1; 
END; 

Новое в mysql btw. Заранее спасибо.

ответ

3

Для нескольких операторов в процедуре или функции или триггере вы должны установить другой разделитель, кроме ;. В противном случае MySQL думает, что ваша процедура завершается после первого ;, что приводит к ошибке синтаксиса. Попробуйте так:

DELIMITER $$ 
CREATE PROCEDURE marouri_insert_users_emails() 

BEGIN 

DECLARE a INT; 
DECLARE b char(16); 
DECLARE cur1 CURSOR FOR SELECT id,name FROM glpi_users; 

OPEN cur1; 

read_loop: LOOP 
FETCH cur1 INTO a,b; 

IF a > 6 THEN 
    INSERT INTO glpi_useremails(users_id,is_default,is_dynamic,email) VALUES (a,1,0,CONCAT(b, '@alomrane.ma'); 
END IF; 
END LOOP; 
CLOSE cur1; 
END$$ 
DELIMITER ; 

О, и вы можете объявить обработчик продолжать обрабатывать ситуацию, когда курсор не находит больше строк. Пожалуйста, см. Примеры according manual page.

+0

Отлично! Спасибо за разъяснения. Но теперь я получаю ту же ошибку в строке 15 ... –

+0

Добавили ли вы обработчик продолжения? Объявления курсора должны отображаться перед объявлениями обработчиков и после объявлений переменных и условий. Если это не решит проблему, отредактируйте свой вопрос с помощью нового кода и нового сообщения об ошибке. – fancyPants

+0

Да, я добавил обработчик продолжения. Но потом я понял, что у меня где-то отсутствовала скобка :) –

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