Hallo Leute!
Ich brauche dringend Hilfe bei ein paar Übungsaufgaben, die ich bislang nicht gelöst bekomme.
Vielen lieben Dank schon mal im Voraus.
Mein Erstellungsskript:
-------------------------------------------------------------------------------------
Ich brauche dringend Hilfe bei ein paar Übungsaufgaben, die ich bislang nicht gelöst bekomme.
Vielen lieben Dank schon mal im Voraus.
Mein Erstellungsskript:
Code:
DROP TABLE vl_KUNDEN CASCADE CONSTRAINTS; DROP TABLE vl_LISTEN CASCADE CONSTRAINTS; DROP TABLE vl_TITEL CASCADE CONSTRAINTS; DROP TABLE vl_MEDIEN CASCADE CONSTRAINTS; DROP TABLE vl_DVDLISTEN CASCADE CONSTRAINTS; DROP TABLE vl_VERSCHICKT CASCADE CONSTRAINTS; CREATE TABLE vl_KUNDEN ( KID NUMBER(4,0), ANREDE VARCHAR(20), NAME VARCHAR(20), VORNAME VARCHAR(20), STRASSE VARCHAR(30), PLZ CHAR(5), ORT VARCHAR(20), CONSTRAINT pk_vl_KUNDEN PRIMARY KEY (KID) ); CREATE TABLE vl_LISTEN ( LID NUMBER(6,0), KID NUMBER(4,0), FÜLLSTAND NUMBER(4,0), CONSTRAINT pk_vl_LISTEN PRIMARY KEY (LID) ); ALTER TABLE vl_LISTEN ADD CONSTRAINT fk_Listen_Kunden FOREIGN KEY (KID) REFERENCES vl_KUNDEN; CREATE TABLE vl_TITEL ( TID NUMBER(4,0), TITEL VARCHAR(100), LAUFZEIT NUMBER(3,0), CONSTRAINT pk_vl_TITEL PRIMARY KEY (TID) ); CREATE TABLE vl_MEDIEN ( MID NUMBER(6,0), TID NUMBER(4,0), CONSTRAINT pk_vl_MEDIEN PRIMARY KEY (MID) ); ALTER TABLE vl_MEDIEN ADD CONSTRAINT fk_Medien_Titel FOREIGN KEY (TID) REFERENCES vl_TITEL; CREATE TABLE vl_DVDLISTEN ( DLID NUMBER(7,0), LID NUMBER(6,0), TID NUMBER(4,0), CONSTRAINT pk_vl_DVDLISTEN PRIMARY KEY (DLID) ); ALTER TABLE vl_DVDLISTEN ADD CONSTRAINT fk_Dvdlisten_Listen FOREIGN KEY (LID) REFERENCES vl_LISTEN; ALTER TABLE vl_DVDLISTEN ADD CONSTRAINT fk_Dvdlisten_Titel FOREIGN KEY (TID) REFERENCES vl_TITEL; CREATE TABLE vl_VERSCHICKT ( VID NUMBER(6,0), LID NUMBER(6,0), MID NUMBER(6,0), VERSCHICKT DATE, ZURUECK DATE, CONSTRAINT pk_vl_VERSCHICKT PRIMARY KEY (VID) ); ALTER TABLE vl_VERSCHICKT ADD CONSTRAINT fk_Verschickt_Listen FOREIGN KEY (LID) REFERENCES vl_LISTEN; ALTER TABLE vl_VERSCHICKT ADD CONSTRAINT fk_Verschickt_Medien FOREIGN KEY (MID) REFERENCES vl_MEDIEN; PROMPT Tabellenstrukturen anzeigen: PROMPT vl_KUNDEN(KID, ANREDE, NAME, VORNAME, STRASSE, PLZ, ORT) KEY={KID} PROMPT vl_LISTEN(LID, KID, FÜLLSTAND) KEY={LID} PROMPT vl_TITEL(TID, TITEL, LAUFZEIT) KEY={TID} PROMPT vl_MEDIEN(MID, TID) KEY={MID} PROMPT vl_DVDLISTEN(DLID, LID, TID) KEY={DLID} PROMPT vl_VERSCHICKT(VID, LID, MID, VERSCHICKT, ZURUECK) KEY={VID} INSERT INTO vl_KUNDEN VALUES ( 22, 'Frau', 'Gerlach', 'Heidi', 'Im Gieß 4', '73087', 'Bad Boll'); INSERT INTO vl_KUNDEN VALUES ( 23, 'Frau', 'Gerlach', 'Hilde', 'Blumhardtweg 30', '73087', 'Bad Boll'); INSERT INTO vl_KUNDEN VALUES ( 24, 'Herrn', 'Meier', 'Kurt', 'Hunkelestr. 2', '81476', 'München'); INSERT INTO vl_KUNDEN VALUES ( 25, 'Prof.', 'Meier', 'Kurt', 'Lange Reihe 84', '20099', 'Hamburg'); INSERT INTO vl_KUNDEN VALUES ( 26, 'Herrn Dr.', 'Brühbach', 'Rudolf', 'Marienstr. 5', '83278', 'Traunstein'); INSERT INTO vl_LISTEN VALUES ( 80888, 22, 11); INSERT INTO vl_LISTEN VALUES ( 80889, 23, 0); INSERT INTO vl_LISTEN VALUES ( 80890, 24, 0); INSERT INTO vl_LISTEN VALUES ( 80891, 25, 0); INSERT INTO vl_LISTEN VALUES ( 80892, 26, 0); INSERT INTO vl_TITEL VALUES ( 5028, 'Sherlock Holmes', 123); INSERT INTO vl_TITEL VALUES ( 5835, 'Avatar - Aufbruch nach Pandora', 155); INSERT INTO vl_TITEL VALUES ( 907, 'Selbst ist die Braut', 103); INSERT INTO vl_TITEL VALUES ( 8670, 'Valentinstag', 120); INSERT INTO vl_TITEL VALUES ( 9592, 'Die schönsten Eisenbahnen', 90); INSERT INTO vl_TITEL VALUES ( 2893, 'Eisenbahn-Geschichte', 145); INSERT INTO vl_TITEL VALUES ( 7402, 'Die Herzogin', 106); INSERT INTO vl_TITEL VALUES ( 1752, 'Elizabeth - Das goldene Königreich', 110); INSERT INTO vl_MEDIEN VALUES ( 77777, 5028); INSERT INTO vl_MEDIEN VALUES ( 26421, 5835); INSERT INTO vl_MEDIEN VALUES ( 26422, 5835); INSERT INTO vl_MEDIEN VALUES ( 6647, 907); INSERT INTO vl_MEDIEN VALUES ( 99767, 8670); INSERT INTO vl_MEDIEN VALUES ( 32206, 9592); INSERT INTO vl_MEDIEN VALUES ( 14989, 2893); INSERT INTO vl_MEDIEN VALUES ( 29879, 7402); INSERT INTO vl_MEDIEN VALUES ( 66903, 1752); INSERT INTO vl_DVDLISTEN VALUES ( 555511, 80889, 8670); INSERT INTO vl_DVDLISTEN VALUES ( 555512, 80888, 5835); INSERT INTO vl_DVDLISTEN VALUES ( 555513, 80889, 7402); INSERT INTO vl_DVDLISTEN VALUES ( 555514, 80889, 5835); INSERT INTO vl_DVDLISTEN VALUES ( 555515, 80888, 907); INSERT INTO vl_DVDLISTEN VALUES ( 555516, 80890, 7402); INSERT INTO vl_DVDLISTEN VALUES ( 555517, 80888, 5835); INSERT INTO vl_DVDLISTEN VALUES ( 555518, 80889, 5835); INSERT INTO vl_DVDLISTEN VALUES ( 555519, 80890, 5835); INSERT INTO vl_DVDLISTEN VALUES ( 555520, 80890, 8670); INSERT INTO vl_DVDLISTEN VALUES ( 555521, 80889, 907); INSERT INTO vl_VERSCHICKT VALUES ( 19755, 80888, 26421, TO_DATE('15.05.2011','DD.MM.YYYY'), TO_DATE('17.05.2011','DD.MM.YYYY')); INSERT INTO vl_VERSCHICKT VALUES ( 19756, 80888, 6647, TO_DATE('15.05.2011','DD.MM.YYYY'), TO_DATE('17.05.2011','DD.MM.YYYY')); INSERT INTO vl_VERSCHICKT VALUES ( 19757, 80888, 32206, TO_DATE('18.05.2011','DD.MM.YYYY'), NULL); INSERT INTO vl_VERSCHICKT VALUES ( 19758, 80888, 66903, TO_DATE('18.05.2011','DD.MM.YYYY'), NULL); INSERT INTO vl_VERSCHICKT VALUES ( 19759, 80889, 66903, TO_DATE('10.04.2011','DD.MM.YYYY'), TO_DATE('05.05.2011','DD.MM.YYYY')); INSERT INTO vl_VERSCHICKT VALUES ( 19760, 80889, 14989, TO_DATE('10.05.2011','DD.MM.YYYY'), TO_DATE('05.05.2011','DD.MM.YYYY')); INSERT INTO vl_VERSCHICKT VALUES ( 19761, 80889, 26422, TO_DATE('05.05.2011','DD.MM.YYYY'), NULL); INSERT INTO vl_VERSCHICKT VALUES ( 19762, 80889, 99767, TO_DATE('05.05.2011','DD.MM.YYYY'), NULL); COMMIT; DESC vl_KUNDEN PROMPT Tabelle vl_KUNDEN SELECT * FROM vl_KUNDEN; DESC vl_LISTEN PROMPT Tabelle vl_LISTEN SELECT * FROM vl_LISTEN; DESC vl_TITEL PROMPT Tabelle vl_TITEL SELECT * FROM vl_TITEL; DESC vl_MEDIEN PROMPT Tabelle vl_MEDIEN SELECT * FROM vl_MEDIEN; DESC vl_DVDLISTEN PROMPT Tabelle vl_DVDLISTEN SELECT * FROM vl_DVDLISTEN; DESC vl_VERSCHICKT PROMPT Tabelle vl_VERSCHICKT SELECT * FROM vl_VERSCHICKT;
Code:
-- Aufgabe 1 /* Erstellen Sie eine Datenbankfunktion LISTENFUELLSTAND(kid), die den Füllstand der Kundenliste für einen bestimmten Kunden anzeigt. Die Abfrage SELECT kid,listenfuellstand(kid) from kunden; soll folgende Ausgabe haben: KID NAME VORNAME FÜLLSTAND ---- -------- ------- ---------------------- 22 Gerlach Heidi 3 23 Gerlach Hilde 5 24 Meier Kurt 3 25 Meier Kurt 0 26 Brühbach Rudolf 0 */ -- bisheriger Lösungsansatz: SET SERVEROUTPUT ON SIZE 2500 DECLARE FUNCTION LISTENFUELLSTAND(kid IN NUMBER) RETURN NUMBER IS BEGIN SELECT name FROM vl_kunden ; END LISTENFUELLSTAND; BEGIN SELECT * FROM vl_kunden; END; / -- füllstand VL_LISTEN."FÜLLSTAND"%type; -- DBMS_OUTPUT.PUT_LINE('Füllstand :'||füllstand); SET SERVEROUTPUT ON SIZE 2500 DECLARE kid vl_kunden.kid%type; name vl_kunden.name%type; vorname vl_kunden.vorname%type; fuellstand vl_listen.füllstand%type; BEGIN FOR datensatz IN (Select * from vl_kunden) LOOP SELECT k.kid, k.name, k.vorname, l.füllstand INTO kid, name, vorname, fuellstand FROM vl_kunden k, vl_listen l where l.kid = k.kid and k.kid = datensatz.kid; DBMS_OUTPUT.PUT_LINE('KID:'||kid|| ' Name: ' ||name|| ' Vorname: ' ||vorname|| ' Füllstand: ' ||fuellstand); END LOOP; END; /
Comment