-- Views und Trigger -- SQL Tabellen -- Tabelle Pilot CREATE TABLE pilot ( personalnr INTEGER PRIMARY KEY, name VARCHAR NOT NULL, alter INTEGER, flugstunden NUMERIC ); -- Tabelle Flugszeugtype CREATE TABLE flugzeugtyp ( typbezeichnung VARCHAR PRIMARY KEY, reisegeschwindigkeit NUMERIC, typflugstunden NUMERIC ); -- Tabelle Fliegt CREATE TABLE fliegt ( personalnr INTEGER REFERENCES pilot(personalnr), typbezeichnung VARCHAR REFERENCES flugzeugtyp(typbezeichnung), fliegtflugstunden NUMERIC, PRIMARY KEY(personalnr, typbezeichnung) ); -- Befüllen der Tabellen pilot und flugzeugtyp INSERT INTO pilot (personalnr, name, alter, flugstunden) VALUES (1007, 'James', 44, 20012); INSERT INTO pilot (personalnr, name, alter, flugstunden) VALUES (1008, 'Zoe', 33, 10020); INSERT INTO pilot (personalnr, name, alter, flugstunden) VALUES (1009, 'Walther', 27, 5020); INSERT INTO flugzeugtyp (typbezeichnung, reisegeschwindigkeit, typflugstunden) VALUES ('Airbus A320', 800, 50821); INSERT INTO flugzeugtyp (typbezeichnung, reisegeschwindigkeit, typflugstunden) VALUES ('Airbus A370', 800, 20312); INSERT INTO flugzeugtyp (typbezeichnung, reisegeschwindigkeit, typflugstunden) VALUES ('Boing B737', 800, 30021); -- View CREATE VIEW pflugstunden AS SELECT personalnr, name , SUM (flugstunden) FROM pilot GROUP BY personalnr, name; CREATE VIEW typflugstunden AS SELECT typbezeichnung, SUM (typflugstunden) FROM flugzeugtyp GROUP BY typbezeichnung; SELECT * FROM pflugstunden; -- Trigger CREATE OR REPLACE FUNCTION AktualisiereFlugstunden ( ) RETURNS TRIGGER AS ' BEGIN -- aktualisiere die Flugstunden des Piloten UPDATE pilot SET flugstunden = flugstunden + NEW.fliegtflugstunden WHERE personalnr = NEW.personalnr; -- aktualisiere die Flugstunden des Flugzeugtyps UPDATE flugzeugtyp SET typflugstunden = typflugstunden + NEW.fliegtflugstunden WHERE typbezeichnung = NEW.typbezeichnung; RETURN NEW; END; ' LANGUAGE 'plpgsql'; CREATE TRIGGER pflugstunden AFTER INSERT ON fliegt FOR EACH ROW EXECUTE PROCEDURE AktualisiereFlugstunden ( ); INSERT INTO fliegt (personalnr, typbezeichnung, fliegtflugstunden) VALUES (1007, 'Airbus A320', 10000); INSERT INTO fliegt (personalnr, typbezeichnung, fliegtflugstunden) VALUES (1008, 'Airbus A320', 1000); SELECT * FROM pflugstunden;