Как перебрать таблицу с помощью курсора в MySQL?

У меня есть следующая таблица в моей базе данных, и я написал следующую хранимую процедуру, чтобы перебрать таблицу.

Когда я вызываю эту хранимую процедуру, я получаю только одну запись.

В чем может быть ошибка, которую я сделал, и как это можно исправить?

+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| date   | date         | NO   |     | NULL    |       |
| inQty  | decimal(5,2) | NO   |     | 0.00    |       |
| outQty | varchar(45)  | YES  |     | 0.0     |       |
+--------+--------------+------+-----+---------+-------+


-- --------------------------------------------------------------------------------
-- Routine DDL
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `get_balance`()
BEGIN

DECLARE vDate DATE DEFAULT '0000-00-00';
DECLARE vInQty DECIMAL DEFAULT 0.0;
DECLARE tOutQty DECIMAL DEFAULT 0.0;
DECLARE balance DECIMAL DEFAULT 0.0;

DECLARE vvDate DATE DEFAULT '0000-00-00';

DECLARE flag INT DEFAULT 0;

DECLARE tCursor CURSOR FOR SELECT * FROM new_table;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1;

OPEN tCursor;

REPEAT
FETCH tCursor INTO vDate, vInQty, tOutQty;

 SELECT vDate, vInQty, tOutQty;


UNTIL flag
END REPEAT;

CLOSE tCursor;

END

1 ответ

Приведенная выше ПРОЦЕДУРА возвращает только одну строку, потому что вы обновляете свои переменные (vDate, vInQty, tOutQty) каждый раз внутри тела REPEAT.

Мое предложение исправить это:

  1. CREATE TEMPORARY TABLE tmp_table, каждая переменная которого представляет столбец в этой таблице tmp_table.
  2. внутри вставки REPEAT в эту tmp_table.
  3. выберите * из таблицы temp_table.
  4. DROP tmp_table. / * Очистить */
Другие вопросы по тегам