Datenbankprogrammierung (Oracle)

Transcription

Datenbankprogrammierung (Oracle)
Universität Augsburg, Institut für Informatik
Datenbanken u. Informationssysteme
Übungsblatt 6
Datenbankprogrammierung (Oracle)
Aufgabe 1: Reguläre Ausdrücke (Oracle)
Oracle unterstützt reguläre Ausdrücke in SQL Anweisungen. Einige Funktionen hierfür sind
REGEXP_INSTR, REGEXP_LIKE, REGEXP_REPLACE and REGEXP_SUBSTR
Weitere Informationen zu regulären Ausdrücken finden Sie im Oracle Application Developer’s Guide auf
http://www.oracle.com/pls/db111/homepage
a) Machen Sie sich mit den Oracle spezifischen Funktionen für reguläre Ausdrücke vertraut.
b) Gegeben sei eine Relation FORUM(ID, Autor, Text), die die Einträge eines Forums enthält. Die Tabelle
FORUM ist ein public synonym und kann von Ihnen eingesehen werden.
Um unerwünschte Werbung herauszufiltern, soll nun überprüft werden, welche Einträge in der Spalte Text eine
eMail- oder eine Internet-Adresse enthalten. Können Sie einen solchen Test mit Hilfe von regulären Ausdrücken
umsetzen?
Aufgabe 2: DAX (Subqueries, Oracle-SQL)
In der Tabelle DAX finden Sie alle Tageskurse des Deutsche Aktienindexes von Juli 1988 bis Juni 2004.
Beantworten Sie die folgenden Aufgaben:
a) An wie vielen Tagen wurde ein Kurs veröffentlicht?
b) Was war der Höchststand des Dax? An welchem Tag wurde dieser erreicht?
c) Geben Sie die 10 Tage mit den 10 höchsten Dax-Ständen aus.
d) Geben Sie den durchschnittlichen Kurs jedes Jahres aus. Ergänzen Sie die Abfrage, so dass zusätzlich ausgegeben
wird, an wie vielen Tagen der Kurs höher war und an wie vielen niedriger.
e) Es soll nun für jeden Tag ausgegeben werden, ob der DAX im Vergleich zum letzten Kurs gestiegen oder gefallen
ist. Betrachten Sie dazu die Funktion LAG.
LAG(<SPALTE>,<ANZAHL>) OVER (ORDER BY <SORTIERUNG>)
Diese Funktion bietet Zugriff auf Attributwerte vorheriger Tupel. Die Parameter haben dabei folgende Semantik:
• anzuzeigende <SPALTE>
• <ANZAHL> der Zeilen, die zurückgeblickt wird
• <SORTIERUNG> des Rückblicks
(Die Funktion LEAD bietet dieselbe Funktionalität für einen Blick auf nachfolgende Tupel.)
f) Geben Sie die 10 Tage aus, an denen der Dax am stärksten gestiegen ist und mit einer weiteren Anfrage die 10
Tage, an denen er am stärksten gefallen ist.
Aufgabe 3: SQL (Oracle)
Gegeben sei die folgende Relation:
messwerte(datum, wert_1, wert_2, wert_3, wert_4, wert_5, wert_6)
Die Spalten wert 1 bis wert 6 enthalten numerische Messwerte für den in datum angegebenen Tag. Bearbeiten
Sie die folgenden Aufgaben:
a) Erstellen Sie zunächst ihre eigene Relation messwerte und füllen Sie diese mit geeigneten Daten. datum ist
Primärschlüssel.
b) Geben Sie für jeden Tag den höchsten und den niedrigsten Messwert aus.
c) Geben Sie für jeden Tag wert 1 aus und die Differenz von wert 1 und dem Vortageswert von wert 1.
Aufgabe 4: Bäume in der Wildnis
Finden Sie fünf Anwendungsgebiete/-beispiele, die eine baumartige Speicherung von Informationen in der Datenbank
benötigen.
Aufgabe 5: Genealogie
a) Erstellen Sie einen Auszug Ihres Stammbaums. Er sollte mindestens drei Generationen umfassen und (falls vorhanden) auch Ihre Geschwister beinhalten. Bitte folgen Sie nur den mütterlichen Zweigen!
Bei Adoptionen können Sie wählen, welchem Zweig Sie folgen möchten.
Falls Sie keine Lust haben Ihren eigenen Stammbaum zu verwenden (oder aus anderen Gründen), so verwenden
Sie den Stammbaum der Windsor-Familie.
b) Erstellen Sie — analog zur Tabelle breeding aus der Vorlesung — eine Tabelle für den Stammbaum (auf die
Angabe der Väter bitte verzichten!).
c) Geben Sie zu jeder Person die Menge aller Vorgänger im Abstand von einer und zwei Generationen an.
d) Verwenden Sie den Depth-First Traversierungsalgorithmus um eine Nested-Sets-Darstellung des Baums zu bestimmen.
Erzeugen Sie die entsprechende Tabelle mit LFT- und RGT- Feldern.
Stellen Sie Anfragen nach allen Vorgängern bzw. allen Nachfolgern einer bestimmten Person.
e) Kombinieren Sie die Tabelle mit den Verweisen auf die direkten Vorgänger mit der Nested-Sets-Tabelle.
Stellen Sie Anfrage nach allen und nach den direkten Nachfolgern.
Können Sie bestimmen, welche Personen Enkelkinder haben?