Оператор обновления mysql не выполняется с переменными, установленными в цикле while - PullRequest
0 голосов
/ 25 января 2019

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

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

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'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...