Второй день не могу написать процедуру. Явно думаю не так, а понять где ошибка не могу. Есть две таблицы проекты и области: projects и areas. И таблица projects_areas где строки содержат id проекта и id области (многие ко многим). Теперь мне нужна процедура. Входные параметры: id проекта (например 1) и и строка типа 22, 33, 44, 55 содержащая id областей. Соответственно хочу чтобы таблица projects_areas получила новые строки: proj_id area_id 1 22 1 33 1 44 1 55 Код (Text): DELIMITER // CREATE PROCEDURE sp_InsertProjectAreas (in_project_id int, in_areas_array varchar(254)) BEGIN WHILE(LOCATE(', ', in_areas_array)>0) DO INSERT INTO projects_areas (project_id ,area_id) VALUES (in_project_id, CAST(SUBSTRING_INDEX(in_areas_array, ', ', 1) AS INT)); SET in_areas_array = SUBSTRING(LOCATE(', ', in_areas_array) + 2); END WHILE; INSERT INTO projects_areas (project_id, area_id) VALUES (in_project_id, CAST(in_areas_array AS INT)); END// DELIMITER ; В MariaDB получаю #1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MariaDB на предмет корректного синтаксиса около '); END WHILE; INSERT INTO projects_areas (project_id area_id) VALUES...' на строке 8 Что я делаю не так?
@Уникальние Имя Маша, сообщение относится к строке 9. В тексте ошибки выводится часть кода, следующая непосредственно за проблемным участком. Ознакомьтесь с документацией в части описания функции SUBSTRING.
Спасибо, добрый человек. Значит не там я смотрела, а ошибка оказывается элементарная. SET in_areas_array = SUBSTRING(in_areas_array FROM LOCATE(', ', in_areas_array) + 2); Спасибо еще раз