2011-11-03 57 views
1

我在我的數據庫中有下面的表,我寫了下面的存儲過程來遍歷表。如何在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 
+0

爲什麼要使用光標? – Devart

回答

0

以上回報的過程只有一排,因爲您更新變量(vDate,vInQty,tOutQty)的REPEAT體內每一次。

我的建議來解決是:

  1. CREATE TABLE TEMPORARY tmp_table的,在該tmp_table的每個變量表示一個列。
  2. 裏面的REPEAT插入到那個tmp_table中。
  3. select * from temp_table。
  4. DROP tmp_table。/*清理*/