1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
declare var1_cc bigint default 0;
declare var1_dc date default 0;
declare var1_do date default 0;
declare var1_sp float(12,2) default 0;
declare var1_sp2 float(12,2) default 0;
declare var1_mo float(12,2) default 0;
declare var1_id bigint default 0;
declare old_mo float(12,2) default 0;
declare old_cc bigint default 0;
declare var_sold float(12,2) default 0;
declare done int default 0;
declare curseur1 cursor for select compte_clients, dat_compta, date_ope,SP,SP2, mnt_ope, id from test_m;
declare continue handler for sqlstate '01329' set done = 1;
-- ouverture du curseur
open curseur1;
-- lecture 1ère ligne du curseur
fetch curseur1 into var1_cc, var1_dc, var1_do, var1_sp, var1_sp2, var1_mo, var1_id;
-- boucle repeat jusqu'au code erreur 01329 détectant la fin du fichier
label1: repeat
-- Sauvegarde des données lues pour détecter changement de compte
set old_cc = var1_cc;
-- A chaque changement de compte on initialise le solde et on sauvegarde le montant opération
set var_sold = var1_sp;
set old_mo = var1_mo;
-- on teste si la date compta et la date ope sont différentes
if var1_dc <> var1_do then
-- si oui, on lit la prochaine ligne jusqu'a trouvé une ligne avec date compta = date ope
begin
fetch curseur1 into var1_cc, var1_dc, var1_do, var1_sp, var1_sp2, var1_mo, var1_id;
iterate label1;
end;
else
-- on a trouvé une ligne avec date compta = date ope, alors on maj le nouveau solde pour démarrer les calculs
update test_m
set SP2 = var1_SP
where id = var1_id ;
end if;
-- tant que le numéro de compte est identique on calcule le nouveau solde
while var1_cc = old_cc do
-- on lit la ligne que l'on va maj
fetch curseur1 into var1_cc, var1_dc, var1_do, var1_sp, var1_sp2, var1_mo, var1_id;
-- on calcule le nouveau solde
set var_sold = var_sold - old_mo;
-- on maj le fichier
update test_m
set SP2 = var_sold
where id = var1_id ;
-- on sauvegarde le montant ope pour le prochain calcul
set old_mo = var1_mo;
end while;
until done end repeat;
close curseur1; |
Partager