增加MySQL中的变量名称

时间:2018-03-27 13:01:54

标签: mysql database

我想在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 ;

任何帮助?

2 个答案:

答案 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存储过程。