Mysql陌生人语法错误#1064

Mysql陌生人语法错误#1064,mysql,syntax-error,Mysql,Syntax Error,我已经搜索了20分钟,为什么我在mySql中出现这个错误,但找不到答案 #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;

我已经搜索了20分钟,为什么我在mySql中出现这个错误,但找不到答案

#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新手。请提前感谢。

对于过程、函数或触发器中的多个语句,您必须设置另一个分隔符,而不是
。否则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 ;

哦,您可能需要声明一个continue处理程序来处理光标找不到更多行的情况。请参见示例。

是否添加了continue处理程序?游标声明必须出现在处理程序声明之前以及变量和条件声明之后。如果这不能解决问题,请使用新代码和新错误消息编辑您的问题。是的,我添加了continue处理程序。但后来我意识到我遗漏了括号:)