WHILE循环在MySql过程中返回多个结果

时间:2014-06-24 07:51:37

标签: mysql stored-procedures

我正在使用以下存储过程

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个不同的结果。我怎么解决这个问题?请帮助我提出宝贵的建议。

1 个答案:

答案 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)