我的目标是创建一系列" SET"使用LOOP命令的命令:
SET @value_title_1 = value_1
SET @value_title_2 = value_2
...
SET @value_title_99 = value_99
编号(计数器)需要在SET命令的两侧增加等量的数量。
以下是我正在使用的代码的表示,还包括"虚拟条目" (你将通过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(...)会产生语法错误。任何方向或步骤更接近解决方案将非常感谢!或者是否有其他方法可以实现上述相同的结果?
答案 0 :(得分:1)
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
变量值。