82 lines
2.2 KiB
PL/PgSQL
82 lines
2.2 KiB
PL/PgSQL
-- 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; |