Universität Augsburg, Institut für Informatik Wintersemester 2011/2012 Prof. Dr. W. Kießling 03. Feb. 2012 Dr. M. Endres, Dr.-Ing. S. Mandl Datenbankprogrammierung (Oracle) Semesterklausur Hinweise: Die Bearbeitungszeit beträgt 60 Minuten. Verwenden Sie für ihre Lösungen ausschließlich die gehefteten Blätter des Lösungsteils. Die Heftklammern dürfen nicht entfernt werden. Melden Sie sich bei der Aufsicht, falls die Blätter nicht ausreichen sollten! Es sind nur Hilfsmittel in Papierform zugelassen. Benutzen Sie einen dokumentenechten Stift! Verwenden Sie keinen Bleistift! Benutzen Sie außerdem keinen roten und keinen grünen Stift! Überprüfen Sie, ob ihre Platznummer mit der auf der Klausur vermerkten Platznummer übereinstimmt. Melden Sie sich sofort bei der Aufsicht, falls das nicht der Fall sein sollte. Unterschreiben Sie auf dem Deckblatt des Lösungsteils an der vorgesehenen Stelle mit ihrem vollen Vor- und Nachnamen. Schreiben Sie auf jedes Blatt des Lösungsteils ihren Namen. Die Klausur besteht aus 4 Aufgaben mit insgesamt 40 Punkten: 1. ER nach SQL [10 Punkte] 2. PL/SQL [10 Punkte] 3. XML [10 Punkte] 4. Allerlei [10 Punkte]
Aufgabe 1: ER nach SQL, 10 Punkte Für einen Online-Shop soll die Beziehung zwischen verkauften Büchern und Kunden modelliert werden. Folgendes ER-Modell ist gegeben: BuchID Name VerkauftesBuch Kunde verkauft_an AutorenName KundenID Übersetzen Sie das ER-Modell in Oracle konforme SQL-DDL. Beachten Sie dabei die in der Vorlesung vorgestellten Konsistenzvorgaben und Integritätsbedingungen. Hinweis: Das Attribut AutorenName ist ein optionales mehrwertiges Attribut (Name des 1. Autors, Name des 2. Autors,... ).
Aufgabe 2: PL/SQL, 10 Punkte (4+3+3) a) Implementieren Sie in Oracle PL/SQL eine Funktion apocalypse(bdate DATE) welche die Anzahl Tage zwischen dem Datum bdate und dem Datum des Weltuntergangs am 21.12.2012 zurückliefert. Liegt bdate nach dem 21.12.2012 soll eine Fehlermeldung geworfen werden. b) Gegeben ist folgendes Relationenschema: Kunde (Name VARCHAR(20), Geburtstag DATE) Schreiben Sie einen anonymen Block, der für alle Einträge in Kunde den Namen und die Anzahl der Tage ausgibt, die dieser Kunde bis zum 21.12.2012 gelebt haben wird. c) Schreiben Sie einen Trigger, der das Einfügen von Daten in die Relation Kunde nur dann zulässt, wenn der Kunde zum 21.12.2012 mindestens 1000 Tage alt sein wird.
Aufgabe 3: XML, 10 Punkte (2+4+4) Das Datenbank-Backend eines Content-Management-Systems enthalte die Relation CMS (authorid INTEGER, changed DATE, article XMLType) Inhalte von article seien mit folgender DTD konform: <!DOCTYPE ARTICLE [ <!ELEMENT ARTICLE (TITLE, SECTION*)> <!ELEMENT SECTION (HEADLINE, BODY)> <!ELEMENT TITLE (#PCDATA)> <!ELEMENT HEADLINE (#PCDATA)> <!ELEMENT BODY (#PCDATA)> ]> a) Erstellen Sie eine Oracle-Tabelle, um die Relation CMS zu repräsentieren. b) Legen Sie einen CMS-Eintrag mit folgenden Werten an: authorid 127 changed: 30-Jan-12 <CONTENT> <TITLE>The Great Debate</TITLE> <SECTION> article: <HEADLINE>Verse 1</HEADLINE> <BODY>Promise lies ahead</body> </SECTION> </CONTENT> c) Schreiben sie eine Oracle-SQL Anfrage, die ein XML-Dokument folgender Form zurückgibt: <VERS1ENTRIES> <ENTRY> <CHANGED>30-Jan-12</CHANGED> <TITLE>The Great Debate</TITLE> </ENTRY>... </VERS1ENTRIES> Dabei gelten folgende Regeln: Es werden CMS-Einträge selektiert, deren Artikel mindestens einen Abschnitt mit der Überschrift (HEADLINE) Verse 1 enthält. Für diese CMS-Einträge soll jeweils das Änderungsdatum (Attribut changed) und der Titel des Artikels (Tag TITLE) ausgegeben werden.
Aufgabe 4: Allerlei, 10 Punkte (3+3+4) a) Geben Sie eine Anweisung an, die einen Tablespace mit dem Namen tblspace01 erstellt. Die Standardgröße soll 10MB sein. Der Tablespace soll nur temporäre Objekte speichern. b) Erzeugen Sie eine Oracle-Sequenz mit dem Namen s3i, die bei 0 anfängt, immer um 3 erhöht wird und zyklisch ist mit Maximum 9 einen Cache von 3 verwendet. c) Die IT-Abteilung eines Unternehmens hat für alle Abteilungen bereits die Rolle Abteilung definiert. Folgender Auftrag geht an die IT-Abteilung: Richten Sie die neue Rolle Berichtswesen ein. Sie soll alle Rechte haben, die die Rolle Abteilung besitzt. Zusätzlich bekommt sie Lesezugriffe auf die Tabelle Umsatz im Schema Verkauf bezüglich der Attribute Datum und Deckungsbeitrag. Deckungsbeiträge über 10 000 Euro dürfen nicht vom Berichtswesen eingesehen werden.