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

标签 mysql loops variables set increment

我的目标是使用 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/

相关文章:

java - 多个字符串中使用一个字符串 "classes"

mysql - 根据多行的总分对 mysql 中的用户进行排名

c - 如何在C中正确操作字符串

javascript - css Sprite 动画的setInterval

java - 速度 : four ints or one int with many operations

php - 如何将变量从数据库查询传递到 PHP 函数

mysql - 将 Django Count() 与条件查找类型一起使用

mysql - SQL查询根据条件选择记录?

c# - 从数据库到文本框的数据

Java/MySQL 循环...卡住了?