Есть функция
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.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости