我想在MySQL查询中增加变量名。如下所示:
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 ;
有什么帮助吗?
发布于 2018-03-27 13:59:16
您可以使用类似数组的临时表来代替变量:
CREATE TEMPORARY TABLE temp_table (id INT, value INT);
INSERT INTO temp_table (id)
VALUES (0), (1), (2), (3), (4), (5), (6), (7);
您的过程将如下所示:
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查询来检索值:
DECLARE myvar INT;
SELECT value
INTO myvar
FROM temp_table
WHERE id = 1; <- "index" of your desired value
发布于 2018-03-27 14:03:43
您可以使用PREPARE and EXECUTE来完成此操作。我在下面的mysql客户端环境中展示了它,但您也可以在存储过程中执行相同的操作。
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存储过程。
https://stackoverflow.com/questions/49513607
复制相似问题