首页 > 解决方案 > 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'));

标签: mysqlvariablesstored-procedureswhile-loop

解决方案


推荐阅读