У меня есть таблица настроек, и мне нужно задним числом обновить настройки, но оператор обновления не выполняется.
Настройки выглядят так
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'));