循环&增加表达式两边的值

时间:2015-04-07 04:44:52

标签: mysql loops variables set increment

我的目标是创建一系列" 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(...)会产生语法错误。任何方向或步骤更接近解决方案将非常感谢!或者是否有其他方法可以实现上述相同的结果?

1 个答案:

答案 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变量值。