2011-11-03 3 views
1

J'ai la table suivante dans ma base de données et j'ai écrit la procédure stockée suivante pour faire une boucle dans la table. Lorsque j'appelle cette procédure stockée, j'obtiens un seul enregistrement.Comment faire une boucle dans une table en utilisant un curseur dans MySQL?

Quelle pourrait être l'erreur que j'ai faite, et comment cela peut-il être corrigé?

+--------+--------------+------+-----+---------+-------+ 
| 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

Pourquoi voulez-vous utiliser le curseur? – Devart

Répondre

0

La procédure ci-dessus retour qu'une seule ligne, parce que vous mettez à jour vos variables (vDate, vInQty, tOutQty) à chaque fois à l'intérieur du corps REPEAT.

Ma suggestion pour résoudre ce problème est:

  1. CREER TEMPORAIRE TABLE tmp_table, qui chaque variable représente une colonne dans ce tmp_table.
  2. à l'intérieur de l'insertion REPEAT dans cette tmp_table.
  3. Sélectionnez * dans temp_table.
  4. DROP tmp_table./* Nettoyer */
Questions connexes