Weiter Zurück Inhalt

5. Trigger

Wir möchten verhindern, das sich unsere Kunden überschulden und wir als Bank uns auch. Daher fügen wir an die Stammdatentabelle ein Feld 'dispo' an, welches einen max. Dispo für den Kunden definiert. Nun brauchen wir einen Mechanismus, der bei Eingabe einer Buchung prüft, ob das Konto nicht überzogen wird. Dazu definieren wir einen Trigger.

001 --
002 -- erst mal die Spalte den Dispo an die Stammdaten anfügen
003 --
004 ALTER TABLE kunden ADD COLUMN dispo decimal(10,2);
005 
006 
007 --
008 -- nun schreiben wir die Triggerfunktion
009 --
010 CREATE OR REPLACE FUNCTION check_dispo() RETURNS TRIGGER AS $$
011 DECLARE
012 	_current numeric(10,2);
013 	_dispo numeric(10,2);
014 BEGIN
015 	IF NEW.typ = 'Z' THEN 
016 		return NEW;
017 	END IF;
018 	
019 	SELECT INTO _current sum(case when typ='Z' then wert else wert*-1 end) 
020 		from buchungen
021 		where kontonr = NEW.kontonr;
022 	SELECT INTO _dispo dispo * -1 from kunden where kontonr = NEW.kontonr;
023 
024 	IF _dispo > (_current - NEW.wert) THEN
025 		RAISE EXCEPTION 'Dispo überschritten, Buchung ignoriert';
026 	END IF;
027 
028 	RETURN NEW;
029 END;
030 $$ LANGUAGE plpgsql;
031 
032 
033 --
034 -- diese definierte Funktion wird nun unser Trigger
035 --
036 CREATE TRIGGER dispocheck BEFORE INSERT OR UPDATE ON buchungen
037     FOR EACH ROW EXECUTE PROCEDURE check_dispo();
Download trigger.sql


Weiter Zurück Inhalt