Databases Reference
In-Depth Information
nach wird in einer Schleife über den Cursor der maximal freie
Platz in der Variablen maxFreierPlatz für alle Gehege mit Tie-
ren berechnet und geprüft, ob der Flächenbedarf der neuen Art
nicht größer als die freie Fläche ist. Durch andere SQL-
Anfragen wäre es durchaus möglich, den Trigger anders zu ge-
stalten. Der Trigger hat folgende Form.
CREATE OR REPLACE TRIGGER neueArt
BEFORE INSERT OR UPDATE
ON ART
FOR EACH ROW
DECLARE
maxFreierPlatz INTEGER DEFAULT 0;
CURSOR verbraucht IS
SELECT Gehege.Flaeche-SUM(Art.MinFlaeche) frei
FROM Gehege,Tier,Art
WHERE Gehege.Gnr=Tier.Gnr
AND Tier.Gattung=Art.Gattung
GROUP BY Gehege.GNr, Gehege.Flaeche ;
BEGIN
SELECT MAX(Gehege.Flaeche)
INTO maxFreierPlatz
FROM Gehege
WHERE NOT EXISTS(
SELECT *
FROM Tier
WHERE Tier.GNr = Gehege.GNr);
IF maxFreierPlatz IS NULL
THEN
maxFreierPlatz:= 0;
END IF;
FOR g IN verbraucht
LOOP
IF maxFreierPlatz < g.frei
THEN
maxFreierPlatz:=g.frei;
END IF;
END LOOP;
IF maxFreierPlatz<:NEW.MinFlaeche
THEN
RAISE_APPLICATION_ERROR(-20999,
'passt nirgendwo rein');
END IF;
END;
Werden folgende Befehle ausgeführt,
INSERT INTO ART VALUES('Gnu',12);
INSERT INTO ART VALUES('Elefant',100);
274
Search WWH ::




Custom Search