J'ai deux fonctions qui retournent la bonne valeur. Mais quand j'appelle ces fonctions à l'intérieur d'un déclencheur, elles retournent toujours 0 au lieu de la bonne valeur.Fonction renvoie une valeur incorrecte à l'intérieur d'un déclencheur
Le type de retour de ces fonctions est real
. La conséquence directe et dramatique est que le déclencheur insère des valeurs erronées dans les tables lorsqu'il est appelé.
La fonction:
create or replace function get_remaining_hour(id_user_v integer,id_absence_v_type integer,id_year_v integer) returns real as
$BODY$
BEGIN
return (select sum(number_hour)
from remaining_absence_day
where id_user= $1
and id_absence_type=$2
and id_year=$3);
END;
$BODY$
LANGUAGE 'plpgsql' ;
La fonction de déclenchement (modifié pour le test!):
create OR REPLACE function update_absence() returns TRIGGER AS
$BODY$
DECLARE
old_number_hour real;
BEGIN
old_number_hour:=get_remaining_hour(3,2,8);
insert into debugging(col,val) values('old_number_hour', old_number_hour);
return null;
END;
$BODY$
LANGUAGE 'plpgsql' ;
La définition de déclenchement:
drop trigger if exists update_absence on absence;
CREATE TRIGGER update_absence
after update of type,duration_hour,duration_day on absence
for each ROW
execute procedure update_absence();
Sans code: aucun. –
J'ai ajouté un extrait du code que j'utilise. –
Vous ne modifiez rien dans la fonction de déclenchement. Vous n'attribuez cette valeur qu'à une variable locale, mais vous ne modifiez pas l'enregistrement 'NEW'. –