我的数据库中有下表,我编写了以下存储过程来循环该表。
当我调用这个存储过程时,我只得到一条记录。
我可能犯了什么错误,如何解决?
+--------+--------------+------+-----+---------+-------+
| 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
上面的过程仅返回一行,因为您每次在 REPEAT 主体内更新变量(vDate、vInQty、tOutQty)。
我解决这个问题的建议是:
- 创建临时表tmp_table,其中每个变量代表此tmp_table中的一列。
- 在 REPEAT 内插入到该 tmp_table 中。
- 从临时表中选择*。
- 删除 tmp_table。 /* 清理 */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)