Как перебрать таблицу с помощью курсора в MySQL? - PullRequest
2 голосов
/ 03 ноября 2011

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

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

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

+--------+--------------+------+-----+---------+-------+
| 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 Ответ

0 голосов
/ 14 августа 2017

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

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

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