Problème sur le déclanchement d'un trigger
Salut à tous !
Alors le problème est un peut "fantomatique"... On arrive pas à trouver la source car nous n'avons aucun message d'erreur.
On à un simple trigger pour tester son fonctionnement :
Code:
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
| DELIMITER $$
DROP TRIGGER `ringtours`.`histo_service_prix`$$
create trigger `histo_service_prix` AFTER UPDATE on `service_prix`
for each row begin
Declare cpt int(6);
Declare curseur1 cursor for
select count(*) from agence;
insert into
ringtours_historique.histo_prix
values
(
1,
209714,
20091101,
'F1',
20090,
0,
0,
0,
concat(curdate(),' ',curtime()),
200,
250,
1337
);
-- select 1 into @test;
open curseur1;
fetch curseur1 into cpt;
close curseur1;
end;
$$
DELIMITER ; |
Quand on fait un update depuis le client mysql le trigger s'execute bien.
Si l'update viens d'une procédure stockée (qui fonctionne parfaitement sans le trigger)
avec un Call de cette procédure ben...rien l'update ne ce fait pas.
Si besoin voici la procédure stockée en question:
Code:
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
| DELIMITER $$
DROP PROCEDURE IF EXISTS `ringtours`.`flo_prix`$$
CREATE DEFINER=`***`@`%` PROCEDURE `flo_prix`(IN delta double, IN typeC int(5), IN fp int(11))
BEGIN
Declare cpt int(6);
Declare ret int(1);
Declare curseur1 cursor for
select
count(*)
from
blocage_log
where
tablelock = 'service_prix'
and table_id in
(
select
idservice_prix
from
service_prix
where
idtype_service = typeC
and idfourniss_prix = fp
);
Declare exit handler for sqlexception, not found select -1;-- set @ret = -1;
open curseur1;
Fetch curseur1 into cpt;
close curseur1;
if cpt = 0 then
set ret = 0;
update service_prix
set
pa_service_prix = pa_service_prix+delta,
PV1_SERVICE_PRIX = PV1_SERVICE_PRIX+delta,
PV2_SERVICE_PRIX = PV2_SERVICE_PRIX+delta,
PV3_SERVICE_PRIX = PV3_SERVICE_PRIX+delta
where
idtype_service = typeC
and idfourniss_prix = fp;
else
set ret = 1;
end if;
select ret;
end$$
DELIMITER ; |
Merci pour vos lumières !:ccool:
Edit : Alors en sortant l'update (bout de code en rouge) de ma procédure stockée, en le mettant dans une seconde procédure, qui est appelée par la première ça marche :aie::aie::aie: ....
Edit bis : Bon ben finalement j'ai tout remit comme au départ (sans la 2nd procédure) j'ai drop et recréé mon trigger...drop et recréé ma procédure stockée et par magie ça marche....
Rassurez moi, faut-il vraiment recréer toutes les procédures stockées qui font un update sur une table, si je créer un trigger sur cette table ???
Edit bis bis : Il semblerait que si... je suppose que comme la procédure est compilée, si on rajoute un trigger après sa création ça foire.:calim2: