2014-09-30 91 views
1

我一直在寻找20分钟为什么我在mySql中遇到这个错误,但找不到答案。Mysql陌生人语法错误#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行得到相同的错误... – 2014-09-30 11:44:14

+0

您是否添加了继续处理程序?游标声明必须出现在处理程序声明之前以及变量和条件声明之后。如果这不能解决问题,请使用新代码和新错误消息编辑您的问题。 – fancyPants 2014-09-30 12:31:29

+0

是的,我添加了继续处理程序。但后来我意识到我在某处丢失了括号:) – 2014-10-03 09:50:26