Ich habe zwei Funktionen, die den guten Wert zurückgeben. Aber wenn ich diese Funktionen innerhalb eines Triggers aufrufen, geben sie immer 0 statt des guten Wertes zurück.Funktion gibt schlechten Wert innerhalb eines Triggers zurück
Der Rückgabetyp dieser Funktionen ist real
. Die direkte und dramatische Konsequenz ist, dass der Trigger falsche Werte in Tabellen einfügt, wenn er aufgerufen wird.
Die Funktion:
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' ;
Die Triggerfunktion (zum Testen geändert!):
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' ;
Die Trigger-Definition:
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();
Ohne Code: Nein. –
Ich habe einen Auszug aus dem Code, den ich verwende. –
Sie ändern nichts in der Triggerfunktion. Sie ordnen diesen Wert nur einer lokalen Variablen zu, aber Sie ändern den Datensatz 'NEW' nicht. –