首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的增量变量名

MySQL中的增量变量名
EN

Stack Overflow用户
提问于 2018-03-27 21:01:54
回答 2查看 309关注 0票数 0

我想在MySQL查询中增加变量名。如下所示:

代码语言:javascript
复制
 DELIMITER $$
 DROP PROCEDURE IF EXISTS test$$
 CREATE PROCEDURE test()
 BEGIN
 DECLARE y  INT;
 SET y = 0;
 WHILE y  <= 7 DO

 // insert query

// i want to increment a variable name like
// concat(@variable_name,"_",y) = last_insert_id();

// ....

SET  y = y + 1; 
END WHILE;
END$$
DELIMITER ;

有什么帮助吗?

EN

回答 2

Stack Overflow用户

发布于 2018-03-27 21:59:16

您可以使用类似数组的临时表来代替变量:

代码语言:javascript
复制
CREATE TEMPORARY TABLE temp_table (id INT, value INT);

INSERT INTO temp_table (id)
VALUES (0), (1), (2), (3), (4), (5), (6), (7);

您的过程将如下所示:

代码语言:javascript
复制
CREATE PROCEDURE test()
BEGIN
  DECLARE y INT;
  SET y = 0;
  WHILE y  <= 7 DO

    // insert query

    UPDATE temp_table
    SET value = last_insert_id()
    WHERE id = y;

    SET  y = y + 1;

  END WHILE;
END$$

之后可以使用SELECT查询来检索值:

代码语言:javascript
复制
DECLARE myvar INT;

SELECT value
INTO myvar
FROM temp_table
WHERE id = 1; <- "index" of your desired value
票数 0
EN

Stack Overflow用户

发布于 2018-03-27 22:03:43

您可以使用PREPARE and EXECUTE来完成此操作。我在下面的mysql客户端环境中展示了它,但您也可以在存储过程中执行相同的操作。

代码语言:javascript
复制
mysql> set @sql = CONCAT('SET @foo, 1, ' = 123');

mysql> prepare stmt from @sql;
Statement prepared

mysql> execute stmt;

mysql> select @foo1;
+-------+
| @foo1 |
+-------+
|   123 |
+-------+

然而,我担心你是在问一个XY Problem。您应该考虑是否有其他方法可以编写代码,而不需要无限数量的变量。例如,在插入之后,可以对生成的插入id执行任何操作。

考虑使用应用程序代码来执行插入,而不是使用存储过程。我避免使用MySQL存储过程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49513607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档