我的目标是使用 LOOP 命令创建一系列“SET”命令:
SET @value_title_1 = value_1
SET @value_title_2 = value_2
...
SET @value_title_99 = value_99
编号(计数器)需要在 SET 命令的两侧增加等量的 1。
以下是我正在使用的代码的表示,还包括“虚拟条目”(您将通过等式左侧的 SET concat 识别它,这是棘手的部分)
delimiter $$
CREATE PROCEDURE set_values_table()
DETERMINISTIC
BEGIN
DECLARE counter INT DEFAULT 1;
simple_loop: LOOP
SET counter=counter+1;
SET concat('@value_title_',counter) = concat('value_',counter);
IF counter = 99 THEN
LEAVE simple_loop;
END IF;
END LOOP simple_loop;
SELECT "procedure completed!";
END$$
delimiter ;
call set_values_table();
不幸的是,SET concat(...) 产生语法错误。任何接近解决方案的方向或步骤将不胜感激!或者是否有其他方法可以实现与上述相同的结果?
最佳答案
SET
命令只能用于使用名称为变量 设置值,而不是表达式。
如果我理解正确,您必须尝试生成 99
SET 命令来设置 99
变量的值并在你的代码。
您需要将 SP 正文的一部分更改如下(我使用循环计数为 5):
BEGIN
DECLARE counter INT DEFAULT 1;
set @result := '';
simple_loop: LOOP
-- SET concat('@value_title_',counter) = concat('value_',counter);
set @result := concat( @result, '\nset @value_title_', counter );
set @result := concat( @result, ' := value_', counter, ';' );
IF counter = 5 THEN
LEAVE simple_loop;
END IF;
SET counter=counter+1;
END LOOP simple_loop;
-- SELECT 'procedure completed!';
SELECT @result as result;
END;
您可以检查输出如下:
mysql> select @result as res\G
*************************** 1. row ***************************
res:
set @value_title_1 := value_1;
set @value_title_2 := value_2;
set @value_title_3 := value_3;
set @value_title_4 := value_4;
set @value_title_5 := value_5;
您可以根据需要使用 @result
变量值。
关于mysql - 循环并递增表达式两边的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29483925/