Цикл WHILE в процедуре MySQL вернул множественный результат

#mysql #stored-procedures

#mysql #хранимые процедуры

Вопрос:

Я использую следующую хранимую процедуру

 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:

Да, так это, скорее всего, произойдет. Чтобы избежать этого, вы можете создать временную таблицу и сохранить в ней значения, а затем выбрать в конце что-то вроде

 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)