ОШИБКА 1064 в mysql, может ли кто-нибудь проверить, в чем ошибка?

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: loop fetch 'в строке 7 я не уверен, где он ошибается

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
0
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • Установите другой разделитель, кроме ;, например: $$. Это позволит синтаксическому анализатору рассматривать весь оператор 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 ;

@Niti, пожалуйста, опубликуйте точное сообщение об ошибке, которое вы получаете.

Madhur Bhaiya 19.10.2018 14:47

# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис рядом с ': = id; конец цикла ins_user; cnt: = cnt + 1; вставить i 'в строку 22

SAM 19.10.2018 15:09

теперь я получаю еще одну ошибку. Мне очень жаль. Я новичок в mysql, поэтому мне сложно

SAM 19.10.2018 15:10

@Niti, когда мы присваиваем значение переменной, MySQL требует использования ключевого слова set. Проверить обновленный ответ сейчас

Madhur Bhaiya 19.10.2018 15:14

Другие вопросы по теме