我正在使用以下存储过程
DELIMITER //
CREATE PROCEDURE SP_WHILE (IN param1 INT)
BEGIN
DECLARE variable1 INT;
SET variable1 = 0;
WHILE variable1 < param1 DO
SELECT variable1 AS id;
SET variable1 = variable1 + 1;
END WHILE;
END //
CALL SP_WHILE (5);
获得以下结果:
+----+
| id |
+----+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
+----+
但目前它在5个不同的窗口中显示5个不同的结果。我怎么解决这个问题?请帮助我提出宝贵的建议。
答案 0 :(得分:3)
是的,这更可能发生。为了避免这种情况,您可以创建一个临时表并将值存储在那里,然后在结束时选择
DELIMITER //
CREATE PROCEDURE SP_WHILE (IN param1 INT)
BEGIN
DECLARE variable1 INT;
SET variable1 = 0;
create temporary table test_1 (id int);
WHILE variable1 < param1 DO
insert into test_1 values (variable1);
SET variable1 = variable1 + 1;
END WHILE;
select * from test_1 ;
END //
delimiter ;
这就是它在mysql中的样子
mysql> DELIMITER //
mysql> CREATE PROCEDURE SP_WHILE (IN param1 INT)
-> BEGIN
-> DECLARE variable1 INT;
-> SET variable1 = 0;
-> create temporary table test_1 (id int);
-> WHILE variable1 < param1 DO
-> insert into test_1 values (variable1);
-> SET variable1 = variable1 + 1;
-> END WHILE;
-> select * from test_1 ;
-> END //
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
mysql> CALL SP_WHILE (5) ;
+------+
| id |
+------+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
+------+
5 rows in set (0.03 sec)