За последние 24 часа нас посетили 16862 программиста и 1298 роботов. Сейчас ищут 1432 программиста ...

Ошибка 1064, помогите найти причину

Тема в разделе "MySQL", создана пользователем Уникальние Имя Маша, 21 окт 2020.

  1. Уникальние Имя Маша

    С нами с:
    17 окт 2020
    Сообщения:
    5
    Симпатии:
    0
    Второй день не могу написать процедуру. Явно думаю не так, а понять где ошибка не могу.
    Есть две таблицы проекты и области: 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):
    1. DELIMITER //
    2. CREATE PROCEDURE sp_InsertProjectAreas (in_project_id int, in_areas_array varchar(254))
    3. BEGIN
    4.     WHILE(LOCATE(', ', in_areas_array)>0)
    5. DO
    6.     INSERT INTO projects_areas (project_id ,area_id)
    7.               VALUES (in_project_id, CAST(SUBSTRING_INDEX(in_areas_array, ', ', 1) AS INT));
    8.    
    9.    SET in_areas_array = SUBSTRING(LOCATE(', ', in_areas_array) + 2);  
    10. END WHILE;
    11.    
    12.    INSERT INTO projects_areas (project_id, area_id) VALUES (in_project_id, CAST(in_areas_array AS INT));
    13.  
    14. END//
    15. DELIMITER ;

    В MariaDB получаю
    #1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MariaDB на предмет корректного синтаксиса около ');
    END WHILE;

    INSERT INTO projects_areas (project_id area_id) VALUES...' на строке 8

    Что я делаю не так?
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Уникальние Имя Маша, сообщение относится к строке 9.
    В тексте ошибки выводится часть кода, следующая непосредственно за проблемным участком.
    Ознакомьтесь с документацией в части описания функции SUBSTRING.
     
  3. Уникальние Имя Маша

    С нами с:
    17 окт 2020
    Сообщения:
    5
    Симпатии:
    0
    Спасибо, добрый человек. Значит не там я смотрела, а ошибка оказывается элементарная.
    SET in_areas_array = SUBSTRING(in_areas_array FROM LOCATE(', ', in_areas_array) + 2);

    Спасибо еще раз:)