Comment faire une boucle à travers une table à l'aide d'un curseur dans MySQL?
J'ai suivantes table dans ma base de données et j'ai écrit la procédure stockée suivante d'une boucle sur le tableau.
Lorsque j'appelle cette procédure stockée, je reçois un seul enregistrement.
Ce que pourrait être l'erreur que j'ai fait, et comment cela peut-il être fixé?
+--------+--------------+------+-----+---------+-------+
| 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
- Pourquoi voulez-vous utiliser le curseur?
Vous devez vous connecter pour publier un commentaire.
La PROCÉDURE ci-dessus renvoie une seule ligne, car la mise à jour de vos variables(vDate, vInQty, tOutQty) à chaque fois à l'intérieur de la RÉPÉTITION corps.
Ma suggestion pour correctif: