cds-104/fliegen/fliegen.sql
2026-04-16 13:30:52 +02:00

80 lines
2.0 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 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);
SELECT *
FROM pflugstunden;