ОШИБКА 1064 в MySQL, кто-нибудь может проверить, что это ошибка? - PullRequest
0 голосов
/ 19 октября 2018
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, на предмет правильного синтаксиса, который можно использовать рядом с 'HANDLE FOR NOT FOUND SET Finished = 1;открыть c_cur;ins_user: извлечение цикла 'в строке 7, я не уверен, где это неправильно

1 Ответ

0 голосов
/ 19 октября 2018
  • Установите разделитель на что-то другое, кроме ;, например: $$.Это позволит синтаксическому анализатору рассматривать весь оператор create как единое целое.
  • В конце переопределите разделитель обратно на ;
  • user - ключевое слово вMySQL .Лучше переименовать таблицу к чему-то другому или использовать обратную галочку вокруг нее.
  • Существует опечатка;должно быть 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 ;
...