Здесь есть очень простой ванильный задокументированный хранимый процесс (лучший результат в Google), который выдает синтаксические ошибки при попытке создать его в Workbench:
CREATE PROCEDURE curdemo()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE a CHAR(16);
DECLARE b, c INT;
DECLARE cur1 CURSOR FOR select id from product;
DECLARE cur2 CURSOR FOR select name from product;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
OPEN cur2;
read_loop: LOOP
FETCH cur1 INTO a, b;
FETCH cur2 INTO c;
IF done THEN
LEAVE read_loop;
END IF;
IF b < c THEN
INSERT INTO test.t3 VALUES (a,b);
ELSE
INSERT INTO test.t3 VALUES (a,c);
END IF;
END LOOP;
CLOSE cur1;
CLOSE cur2;
END;
Только 2строки, которые я изменил, были select id from product
и select name from product
, поэтому он попадет в таблицу, которая действительно существует в моей базе данных.Когда я пытаюсь создать сохраненный процесс (даже не запускать его), я получаю эту ошибку:
Код ошибки: 1064. У вас ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с '' в строке 3
Я успешно создавал хранимые процессы MySQL ранее, но никогда с курсором в нем, и яне получается заставить работать самый простой курсор даже при копировании / вставке прямо с веб-сайта mysql.
Моя цель очень проста: я хочу иметь возможность выполнить запрос в хранимой процедуре, проходя по циклуприводит к появлению курсора, захватывает значение в каждой записи цикла и что-то делает с этим значением.Например,
select id from product
И я бы хотел SET @ID = id
тип вещей, чтобы я мог взять @ID
и сделать некоторые вещи с этим.
Что я делаю не так?