Как перебрать таблицу с помощью курсора в 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.
Мое предложение исправить это:
- CREATE TEMPORARY TABLE tmp_table, каждая переменная которого представляет столбец в этой таблице tmp_table.
- внутри вставки REPEAT в эту tmp_table.
- выберите * из таблицы temp_table.
- DROP tmp_table. / * Очистить */