我想在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 ;
任何帮助?
答案 0 :(得分:0)
您可以使用类似数组的临时表而不是变量:
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
答案 1 :(得分:0)
您可以使用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存储过程。