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 :
Quand on fait un update depuis le client mysql le trigger s'execute bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ;
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:
Merci pour vos lumières !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ;
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 ....
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.
Partager