Есть функция
DROP FUNCTION IF EXISTS func;
DELIMITER $$;
CREATE FUNCTION func(nameFilm varchar(200))
RETURNS INT
language sql
BEGIN
declare countRow INT default 0;
DECLARE idRow INT DEFAULT 0;
SELECT count(*) INTO countRow, id INTO idRow
FROM `film`
WHERE `name` LIKE nameFilm
GROUP BY name;
IF countRow > 0 THEN
UPDATE `film` SET name = nameFilm WHERE id = idRow;
ELSE
INSERT film (`name`) VALUE (nameFilm);
SELECT id INTO idRow WHERE `name` LIKE nameFilm;
END IF;
RETURN idRow;
END$$;
DELIMITER ;
когда пытаюсь запустить ее через поле SQL в phpmyadmin, он выдаёт ошибки на 7,8,12,14, 16-19 строчках
в MySQL WorkBench ругается только на поле id (syntax error missing semicolon). Действительно ли ошибка в синтаксисе и можно ли вообще код запустить в phpmyadmin?
Ошибки в строках:
SELECT count(*) INTO countRow, id INTO idRow
INSERT film (name) VALUE (nameFilm);
SELECT id INTO idRow WHERE name LIKE nameFilm;
Правильно:
SELECT count(*), id INTO countRow, idRow
INSERT film (name) VALUES (nameFilm);
SELECT id INTO idRow FROM film WHERE name LIKE nameFilm;
Также странен запрос (без учёта ошибки синтаксиса):
SELECT count(*) INTO countRow, id INTO idRow
FROM film
WHERE name LIKE nameFilm
GROUP BY name;
Если одному id соответствует одно name - группируйте по id. Иначе - в переменную будут присвоено одно случайное из всех возможных для данного name значение.
К тому же всю эту конструкцию вместе с последующей проверкой и запросами можно заменить на один INSERT .. ON DUPLICATE KEY UPDATE.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Что это вообще такое упаковка и распаковка (boxing/unboxing) и зачем?
Как сделать так чтобы какая та заданная страница сразу открывалась когда запускаешь Spring MVC проект в IntellijIdea?
Такая ситуация, есть репозиторий с проектом, с этим проектом работает разработчик и все работает хорошо