mysql 中的错误 1064,任何人都可以检查错误是什么吗?
ERROR 1064 in mysql, can anybody check what is the error?
CREATE PROCEDURE insert_user(in uname varchar(20),in gender varchar(20),in email varchar(20),in phone varchar(20),in pword varchar(20),in city varchar(20))
BEGIN
DECLARE finished integer default 0;
Declare cnt integer default 0;
declare id integer;
DECLARE c_cur cursor for select user_id from user;
DECLARE CONTINUE HANDLE FOR NOT FOUND SET finished = 1;
open c_cur;
ins_user: loop
fetch c_cur into id;
IF finished = 1 THEN
LEAVE ins_user;
end if;
cnt:=id;
end loop ins_user;
cnt:=cnt+1;
insert into user
values(cnt,uname,email,phone,city,pword,gender);
END;
收到错误 #1064 - 您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 7 行 'HANDLE FOR NOT FOUND SET finished = 1; open c_cur; ins_user: loop fetch ' 附近使用的正确语法
我不确定哪里出错了
- 将分隔符设置为
;
以外的其他内容,例如:$$
。这将允许解析器将整个 create
语句视为一个语句。
- 最后,将分隔符重新定义回
;
user
是一个 keyword in MySQL。最好将 table 重命名为其他名称,或在其周围使用反引号。
- 有错字;应该是
HANDLER
而不是 HANDLE
尝试:
DELIMITER $$
DROP PROCEDURE IF EXISTS insert_user $$
CREATE PROCEDURE insert_user(in uname varchar(20),
in gender varchar(20),
in email varchar(20),
in phone varchar(20),
in pword varchar(20),
in city varchar(20))
BEGIN
DECLARE finished INT DEFAULT 0;
Declare cnt INT DEFAULT 0;
declare id INT;
DECLARE c_cur CURSOR FOR select user_id from `user`;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
open c_cur;
ins_user: loop
fetch c_cur into id;
IF finished = 1 THEN
LEAVE ins_user;
end if;
SET cnt:=id; -- set was missing here
end loop ins_user;
SET cnt:=cnt+1; -- set was missing here
insert into `user`
values(cnt,uname,email,phone,city,pword,gender);
END $$
DELIMITER ;
CREATE PROCEDURE insert_user(in uname varchar(20),in gender varchar(20),in email varchar(20),in phone varchar(20),in pword varchar(20),in city varchar(20))
BEGIN
DECLARE finished integer default 0;
Declare cnt integer default 0;
declare id integer;
DECLARE c_cur cursor for select user_id from user;
DECLARE CONTINUE HANDLE FOR NOT FOUND SET finished = 1;
open c_cur;
ins_user: loop
fetch c_cur into id;
IF finished = 1 THEN
LEAVE ins_user;
end if;
cnt:=id;
end loop ins_user;
cnt:=cnt+1;
insert into user
values(cnt,uname,email,phone,city,pword,gender);
END;
收到错误 #1064 - 您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 7 行 'HANDLE FOR NOT FOUND SET finished = 1; open c_cur; ins_user: loop fetch ' 附近使用的正确语法 我不确定哪里出错了
- 将分隔符设置为
;
以外的其他内容,例如:$$
。这将允许解析器将整个create
语句视为一个语句。 - 最后,将分隔符重新定义回
;
user
是一个 keyword in MySQL。最好将 table 重命名为其他名称,或在其周围使用反引号。- 有错字;应该是
HANDLER
而不是HANDLE
尝试:
DELIMITER $$
DROP PROCEDURE IF EXISTS insert_user $$
CREATE PROCEDURE insert_user(in uname varchar(20),
in gender varchar(20),
in email varchar(20),
in phone varchar(20),
in pword varchar(20),
in city varchar(20))
BEGIN
DECLARE finished INT DEFAULT 0;
Declare cnt INT DEFAULT 0;
declare id INT;
DECLARE c_cur CURSOR FOR select user_id from `user`;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
open c_cur;
ins_user: loop
fetch c_cur into id;
IF finished = 1 THEN
LEAVE ins_user;
end if;
SET cnt:=id; -- set was missing here
end loop ins_user;
SET cnt:=cnt+1; -- set was missing here
insert into `user`
values(cnt,uname,email,phone,city,pword,gender);
END $$
DELIMITER ;