Universität Augsburg, Institut für Informatik Prof. Dr. W. Kießling Dr. A. Huhn, M. Endres WS 2009/2010 11. Dez. 2009 Übungsblatt 8 Datenbankprogrammierung (Oracle) Aufgabe 1: Objekte in Oracle Gegeben seien die folgenden Objekt-Typen: • keyword(code, title, researcharea) • publication(code, title, publisher, keywords) Das Attribut keywords der Relation publication enthält eine Liste von Objekten vom Typ keyword. Eine solche Liste müssen sie dazu zunächst als ARRAY(<Kapazität>) oder als TABLE-Datentyp – analog zu OBJECT-Typen – erstellen. Bearbeiten Sie folgende Aufgaben: a) Finden Sie heraus, welche Unterschiede zwischen ARRAY() und TABLE bestehen. Lösen Sie die folgenden Aufgaben jeweils mit einer Implementierung als ARRAY() und als TABLE. b) Legen Sie mindestens zwei Publikationen (eine davon ohne Keywords) an. c) Geben Sie alle Publikationen mit den zugehörigen Keywords aus. Geben Sie auch die Publikationen aus, für die keine Keywords vorhanden sind. d) Geben Sie alle Publikationen ohne zugehörige Keywords aus. e) Lesen Sie die vorhandenen Publikationen per JDBC und geben Sie sie auf der Kommandozeile aus. Benutzen Sie JDBC-Typen wie java.sql.Struct und java.sql.Array für die zurückgelieferten Typen. Aufgabe 2: Stored Function Schreiben Sie eine Stored Function getProperty(name VARCHAR2). Bei der Übergabe verschiedener Werte sollen unterschiedliche Eigenschaftswerte zurückgeliefert werden: SCHEMA SERVER USER DATE Name des akuellen DB-Schemas IP-Adresse des Servers Name des aktuellen Benutzers formatiertes Datum (Beispiel: 11.12.2009) Alle notwendigen Werte erhalten Sie vom Datenbanksystem. Aufgabe 3: Stored Procedure In dieser Aufgabe soll mit Hilfe einer Stored Procedure ein Primzahl-Test in PL/SQL implementiert werden. Gehen Sie wie folgt vor: a) Schreiben Sie zunächst eine Stored Function isPrime, die für eine Zahl zurückgibt, ob es sich um eine Primzahl handelt. b) Schreiben Sie eine Stored Procedure mit der Signatur printPrimes(low INTEGER, up INTEGER) zur Ausgabe aller Primzahlen zwischen low und up. c) Bei unsinnigen Eingaben (negative Werte, low > up), sollen entsprechende, von Ihnen definierte Fehler geworfen werden. d) Die Stored Procedure soll im Paket PRIME angelegt werden, das als einzige öffentlich bekannte Methode printPrimes enthält. Aufgabe 4: PL/SQL und BLOBs Wie Sie bereits in der Vorlesung zu Datenbanksysteme I kennengelernt haben kann mit Hilfe von Java und JDBC der Datentyp BLOB verarbeitet werden. In dieser Aufgabe sollen Sie nun BLOBs mit PL/SQL in die Datenbank schreiben. Bearbeiten Sie folgende Aufgaben: a) Schlagen Sie im Skript zu Datenbanksystem I Informationen über BLOBs nach. b) Erstellen Sie eine Relation PDFs mit den Attributen ID und PDF (vom Datentyp BLOB). c) Beachten Sie, dass vor der Verwendung des BLOBs ein Eintrag stattfinden muss, bei dem das BLOB leer bleibt (Leer, aber nicht NULL). Verwenden Sie dazu EMPTY_BLOB(). d) BLOBs können nicht direkt vom Dateisystem in die Datenbank geschrieben werden. Es muss zuerst ein Oracle DIRECTORY angelegt werden, welches auf den Pfad im Dateisystem zeigt, wo sich das zu ladende PDF befindet. Erstellen Sie dieses Oracle DIRECTORY. Als Verzeichnis verwenden Sie ’/tmp/’. e) Schreiben Sie PL/SQL Anweisungen, die das PDF (CreditPoints.pdf) in Ihre Relation lädt. In PL/SQL müssen Sie das PDF als BFILE öffnen und in den BLOB der Relation kopieren. Entsprechende Informationen dazu finden Sie im Skript zu Datenbanksysteme I und unter DBMS LOB in der Oracle Referenz. Verwenden Sie ein geegnetes Exception-Handling. f) BLOBs können natürlich nicht auf der Konsole angezeigt werden. Geben Sie deshalb mit Hilfe einer SQL-Anweisung die Größe des BLOBs aus, welche der PDF-Größe entsprechen sollte. g) Wenn Sie wissen möchten, welchen äußerst interessanten Inhalt das PDF enthält, dann finden Sie eine Möglichkeit dieses anzuzeigen.