Bonjour,
Depuis quelques jours, je me prends la tète avec une simple somme de valeurs dans une colonne.
Pour faire certains calculs, j'ai créé une function dans MySQL qui utilise une requête sur un cursor. Je parcours les enregistrements avec un FETCH et à chaque tour de "boucle", j'additionne les valeurs d'une colonne (SET total = total + valeur_du_champ; ). J'arrive à un résultat A.
Maintenant, je fais la même requête mais avec un SUM des valeurs de la colonne plutôt que de tourner dans la boucle. Et là, surprise, j'arrive à un résultat différent (différence de 387 et des poussières sur un total de 485 000 quand meme, ça fait un joli pourcentage d'erreur).
J'ai beau tourné mon code dans tous les sens, je ne trouve pas la faille.
Y aurait-il quelque chose qui m'aurait échappé coté technique, par exemple au niveau du SET, de la précision de certains calculs sous MySQL, ou autre chose ?
Parce que là, je sèche comme un vieux poireau en plein soleil.
Voici le code dans la fonction stockée:
Dans la fonction, la requête charge toutes les lignes, et dans un affichage simple, je fais juste un SUM de la valeur à additionner.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; SET result = 0.00; OPEN cursor_a; REPEAT FETCH cursor_a INTO v_receipt_id, v_premium_ttc; IF v_premium_ttc IS NOT NULL THEN SET result = result + v_premium_ttc; END IF; UNTIL done END REPEAT; CLOSE cursor_a; RETURN result;
Papy
Partager