Hallo,
Ich habe heute eine Frage bzgl. eines Triggers. Ich habe in einer Tabelle ein Feld mit einer Gesamtstundenzahl. Diese Stundenzahl wird über einen Trigger aus verschiedenen anderen Tabellen berechnet und gefüllt. Die Zeiten stehen dabei in mehreren anderen Tabellen und werden über den Trigger zusammengezogen addiert und in das Feld eingetragen.
Jetzt habe ich ein weiteres Feld zur Validierung. Dies Feld ist Ja/Nein. Default-Wert wäre hier immer ungeprüft (Nein). Ein Admin Benutzer muss dann das Feld GEsamtdotation prüfen und von Hand auf Ja setzen. Soweit funktioniert auch alles. Jetzt ist es aber so, dass bei jeder Änderung der Gesamtdotation die Validierung wieder auf Nein gesetzt werden muss, d.h. sobald sich die Zahl im Feld Gesamtdotation ändert muss der Wert in Validierung automatisch auf Nein gesetzt werden, damit anschliessend wieder geprüft und von Hand auf Ja gesetzt werden kann.
Ich bin jetzt nicht ganz sicher, wie ich das in den Trigger der Berechnung der Gesamtdotation einbeziehen kann oder ob ich da einen zweiten Trigger setzen müsste oder wie ich das sonst bewerkstelligen kann. Hat jemand einen Tipp oder kann mir dabei helfen?
Hier wären mal der jetzige Stand.
Vielen, vielen Dank schonmal im Voraus.
CREATE TABLE public.kurse (
id_kurs serial NOT NULL PRIMARY KEY,
studienjahr varchar(50),
bezeichnung varchar,
semester integer,
notizen varchar,
ects integer,
anzahl_lektionen_pro_semester integer,
anzahl_lektionen_pro_woche integer,
anzahl_studierende integer,
id_verantwortlicher integer,
id_studiengang integer,
kuerzel varchar(30),
grunddotation numeric(18,1),
gesamtdotation numeric(18,1),
anzahl_wiederholungen varchar,
validation boolean NOT NULL DEFAULT false,
/* Keys /
CONSTRAINT kurse_pkey
PRIMARY KEY (id_kurs),
/ Foreign keys /
CONSTRAINT fk_kurse_personalbestand
FOREIGN KEY (id_verantwortlicher)
REFERENCES public.personalbestand(id_personalbestand),
CONSTRAINT fk_kurse_studiengaenge
FOREIGN KEY (id_studiengang)
REFERENCES public.studiengaenge(id_studiengang)
) WITH (
OIDS = FALSE
);
CREATE TRIGGER trigger_gesamtdotation
BEFORE UPDATE OR INSERT
ON public.kurse
FOR EACH STATEMENT
EXECUTE PROCEDURE public.moduldb_gesamtdotation();
CREATE OR REPLACE FUNCTION public.moduldb_gesamtdotation()
RETURNS trigger AS
$$
BEGIN
–UPDATE kurse set gesamtdotation = (NEW.anzahl_lektionen_pro_woche14*2.3);
update kurse
set gesamtdotation =
(select sum(anzahl_stunden)
from stunden_kurs_gesamt
where stunden_kurs_gesamt.id_kurs = kurse.id_kurs
group by id_kurs)
where id_kurs = kurse.id_kurs;
RETURN NEW;
END;
$$
LANGUAGE ‘plpgsql’;