-- PRAK 7 -- Aufgabe 1 CREATE OR REPLACE VIEW first_view AS SELECT * FROM FUEHRERSCHEINKLASSEN ORDER BY KLASSENBEZEICHNUNG DESC; CREATE OR REPLACE VIEW second_view AS SELECT * FROM KUNDEN WHERE PID = (SELECT PID FROM KUNDEN MINUS SELECT PID FROM PERSON_FUEHRERSCHEINKLASSE); CREATE OR REPLACE VIEW third_view AS SELECT fk.KLASSENKENNUNG, fk.KLASSENBEZEICHNUNG, (SELECT count(*) FROM PERSON_FUEHRERSCHEINKLASSE pf WHERE pf.KLASSENKENNUNG = fk.KLASSENKENNUNG) COUNTER FROM FUEHRERSCHEINKLASSEN fk; CREATE OR REPLACE VIEW fourth_view AS SELECT PID, Name, Strasse, PLZ, ORT, (SELECT count(*) FROM PERSON_FUEHRERSCHEINKLASSE WHERE PID = KUNDEN.PID) Klassen FROM KUNDEN ORDER BY Klassen DESC; -- Aufgabe 2 -- a) ALTER TABLE FUEHRERSCHEINKLASSEN ADD UNIQUE ( KLASSENBEZEICHNUNG ); -- b) ALTER TABLE KUNDEN MODIFY (ORT VARCHAR2(50) NULL, PLZ NUMBER(8) NULL); CREATE OR REPLACE TRIGGER kunden_PLZ_ORT AFTER INSERT ON KUNDEN FOR EACH ROW BEGIN IF :NEW.ORT is NULL AND :NEW.PLZ is NULL THEN DBMS_OUTPUT.PUT_LINE('ahhhhh'); END IF; END kunden_PLZ_ORT; / INSERT INTO KUNDEN (PID, NAME, STRASSE, KONTONUMMER, BLZ) VALUES (kund_seq.NEXTVAL,'David', 'An der Mergelskaul 32' , 119191991, 37040366); INSERT INTO KUNDEN VALUES (kund_seq.NEXTVAL,'David', 'An der Mergelskaul 32', 'Frechen', 50226, 119191991, 37040366); -- Aufgabe 3 CREATE OR REPLACE FUNCTION middle (x NUMBER, y NUMBER) RETURN NUMBER IS middle NUMBER; BEGIN middle := x + y; middle := middle / 2; RETURN(middle); END; / SELECT middle(4,8) FROM DUAL; -- Aufgabe 4 CREATE OR REPLACE PROCEDURE blub (Strasse IN VARCHAR2, Nummer IN NUMBER, PLZ IN NUMBER, ORT IN VARCHAR2, NATION IN VARCHAR2, RUECK1 OUT VARCHAR2, RUECK2 OUT VARCHAR2) IS not_german EXCEPTION; invalid_input EXCEPTION; BEGIN IF Nummer is NULL OR PLZ is NULL OR ORT is NULL or NATION is NULL THEN RAISE invalid_input; END IF; IF NATION = 'D' THEN RUECK1 := NATION || ' ' || PLZ || ' ' || ORT; dbms_output.put_line(RUECK1); ELSE RAISE not_german; END IF; IF Strasse is NULL THEN RUECK2 := 'POSTFACH ' || Nummer; dbms_output.put_line(RUECK2); END IF; EXCEPTION WHEN not_german THEN dbms_output.put_line('nicht in deutschland'); END; / -- Aufgabe 5 CREATE OR REPLACE PROCEDURE bla(blub IN NUMBER) IS cursor klassen is SELECT distinct KLASSENKENNUNG, (SELECT KLASSENBEZEICHNUNG FROM FUEHRERSCHEINKLASSEN WHERE KLASSENKENNUNG = pf.KLASSENKENNUNG) KLASSENBEZEICHNUNG, (SELECT BESCHREIBUNG FROM FUEHRERSCHEINKLASSEN WHERE KLASSENKENNUNG = pf.KLASSENKENNUNG) BESCHREIBUNG FROM PERSON_FUEHRERSCHEINKLASSE pf; rec FUEHRERSCHEINKLASSEN%ROWTYPE; BEGIN OPEN klassen; LOOP fetch klassen into rec; exit when klassen%notfound; dbms_output.put_line( rec.KLASSENKENNUNG || ' ' || rec.KLASSENBEZEICHNUNG || ' ' || rec.BESCHREIBUNG ); END LOOP; CLOSE klassen; END; /