循环并递增表达式两边的值

Loop & increment values on both sides of an expression

我的目标是使用 LOOP 命令创建一系列 "SET" 命令:

SET @value_title_1 = value_1
SET @value_title_2 = value_2
...
SET @value_title_99 = value_99

编号(计数器)需要在 SET 命令的两侧增加等量的 1。

以下是我正在使用的代码的表示形式,还包括 "dummy entry"(您将通过等式左侧的 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 变量值。