Оператор обновления mysql не выполняется с переменными, установленными в цикле while

У меня есть таблица настроек, и мне нужно обновить настройки задним числом, но оператор обновления не выполняется.

Настройки выглядят так

Module.Component.Name.X.Regex.SearchOptions.Replacements.Pattern

X = это число, может быть 1 или 20, это можно настроить.

Теперь мне нужно задним числом обновить эти настройки до этой структуры.

Module.Component.Name.X.Regex.SearchOptions.Replacements.Y.Pattern

Поскольку для параметров поиска может быть более одного шаблона регулярных выражений

У меня есть рабочий код, но я могу обновить только 1 модуль, а мне нужно обновить все.

Следующая хранимая процедура отлично работает:

DELIMITER //
CREATE PROCEDURE `TEST`()
    BEGIN
    DECLARE oldSettingNameReplacement VARCHAR(1024);
    DECLARE newSettingNameReplacement VARCHAR(1024);

    SET @oldSettingNameReplacement = CONCAT('Module.Components.Name.1.SearchOptions.Replacements.Replacement');
    SET @newSettingNameReplacement = CONCAT('Module.Components.Name.1.SearchOptions.Replacements.1.Replacement');

    UPDATE settings SET settings.settingname=@newSettingNameReplacement WHERE settings.settingname like @oldSettingNameReplacement;
END //

Теперь этого нет, и я не могу понять, почему:

DELIMITER //
CREATE PROCEDURE `TEST`()
BEGIN
    DECLARE oldSettingNameReplacement VARCHAR(1024);
    DECLARE newSettingNameReplacement VARCHAR(1024);
    DECLARE i INT DEFAULT 0;

    SET @i = 1;
    WHILE @i <= 2 DO   
        SET @oldSettingNameReplacement = CONCAT('Module.Components.Name.', @i, '.SearchOptions.Replacements.Replacement');
        SET @newSettingNameReplacement = CONCAT('Module.Components.Name.', @i, '.SearchOptions.Replacements.1.Replacement');

        UPDATE settings SET settings.settingname=@newSettingNameReplacement WHERE settings.settingname like @oldSettingNameReplacement;
        SET @i = @i + 1;
    END WHILE;
END //

по какой-то причине оператор обновления не выполняется, я использовал триггер, чтобы узнать, выполняется ли обновление, оно не срабатывает.

Я также пытался добавить "кавычки", но это также не имеет никакого эффекта:

SET @oldSettingNameReplacement = QUOTE(CONCAT('Module.Components.Name.', @i, '.SearchOptions.Replacements.Replacement'));
SET @newSettingNameReplacement = QUOTE(CONCAT('Module.Components.Name.', @i, '.SearchOptions.Replacements.1.Replacement'));

Когда вы используете LIKE без %, почему бы не использовать = напрямую?

lucumt 25.01.2019 12:16

вы правы, я изменил его, но, к сожалению, это не повлияло на оператор обновления, он не выполнен.

Hirogen 25.01.2019 12:20
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
35
0

Другие вопросы по теме