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 : 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 ;
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 : 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 ;
Merci pour vos lumières !

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.