All pastes #992204 Raw Edit

Unbenannt

public text v1 · immutable
#992204 ·published 2008-04-21 17:53 UTC
rendered paste body
-- 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;
/