Oracle: Abstrakte Datentypen:



Ähnliche Dokumente
JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

Datumsangaben, enthält mindestens Jahr, Monat, Tag

SQL SQL. SQL = Structured Query Language (SEQUEL) IBM San Jose Research Laboratory SYSTEM R. Grundlagen der Datenbanksysteme I

JDBC. Allgemeines ODBC. java.sql. Beispiele

E-Commerce: IT-Werkzeuge. Web-Programmierung. Kapitel 6: Datenbankabfragen mit SQL und PHP. Stand: Übung WS 2014/2015

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 27. Nov M. Endres, A. Huhn, T. Preisinger Lösungsblatt 5

Shopware 4.1 Kategorien

Labor 3 - Datenbank mit MySQL

Dokumentation zur Anlage eines JDBC Senders

UNIVERSITÄT ULM Fakultät für Ingenieurswissenschaften und Informatik Institut für Datenbanken und Informationssysteme

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Datenbanken & Informationssysteme Übungen Teil 1

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

IV. Datenbankmanagement

Prozessbeschreibung. Qualitätsberichte erstellen und vorbefüllen

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

SQL Tutorial. SQL - Tutorial SS 06. Hubert Baumgartner. INSO - Industrial Software

Universität Duisburg-Essen Informationssysteme Prof. Dr.-Ing. N. Fuhr. Praktikum Datenbanken / DB2 Woche 8: Trigger, SQL-PL

desk.modul : WaWi- Export

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Whitepaper. Produkt: combit Relationship Manager. Datensatzhistorie mit dem SQL Server 2000 und combit GmbH Untere Laube Konstanz

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Beispiel: DB-Mock (1/7)

Urs Meier Art der Info Technical Info (Februar 2002) Aus unserer Projekterfahrung und Forschung

MIN oder MAX Bildung per B*Tree Index Hint

Arbeiten mit UMLed und Delphi

Datenbanken für Online Untersuchungen

PostgreSQL unter Debian Linux

Projektbericht Gruppe 12. Datenbanksysteme WS 05/ 06. Gruppe 12. Martin Tintel Tatjana Triebl. Seite 1 von 11

Javakurs zu Informatik I. Henning Heitkötter

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Folgendes PL/SQL Codefragment zeigt das grundlegende Statement für diesen Test: Java.

Views in SQL. 2 Anlegen und Verwenden von Views 2

Ein Ausflug zu ACCESS

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Sructred Query Language

Oracle SQL Tutorium - Wiederholung DB I -

Einführung in SQL. 1. Grundlagen SQL. Structured Query Language. Viele Dialekte. Unterteilung: i. DDL (Data Definition Language)

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Universität Stuttgart Abteilung Anwendersoftware Steht für Embedded SQL in Java. - Java-Methoden als SQL Stored-Procedures

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Anwendungsbeispiele Buchhaltung

Konvertieren von Settingsdateien

Klausur zur Vorlesung Datenbanksysteme I

Bauteilattribute als Sachdaten anzeigen

Relationale Datenbanken in der Praxis

FIS: Projektdaten auf den Internetseiten ausgeben

4. BEZIEHUNGEN ZWISCHEN TABELLEN

cs241: Datenbanken mit Übungen HS 2011

C# - Einführung in die Programmiersprache Arbeiten mit ADO.NET. Leibniz Universität IT Services Anja Aue

Objektorientierte Programmierung. Kapitel 12: Interfaces

Dateneingabe über ein HTML-Formular in eine Datenbank:

Benutzername: Passwort: Nun befindest du dich in einem Bereich, von wo aus du Berichte über Ereignisse schreiben kannst und Fotos dazugeben kannst.

SQLJ. Standardisierte Java-DB. DB-Schnittstelle. Spezifikationen. Oracle, IBM, Informix, Sybase,, Tandem, Sun, Microsoft stehen dahinter

M-net -Adressen einrichten - Apple iphone

Informatik 12 Datenbanken SQL-Einführung

Datenbank - Teil 3. Ziele: Eine Datenbank anlegen mit SQL. Daten eingeben mit SQL. Abfragen stellen mit SQL und PHP.

Kapitel 33. Der xml-datentyp. In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023

Beispiel 1: Filmdatenbank

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Fachhochschule Deggendorf Platzziffer:...

Java Kurs für Anfänger Einheit 5 Methoden

Datenmanagement in Android-Apps. 16. Mai 2013

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Urlaubsregel in David

Klausur Interoperabilität

Etikettendruck mit Works 7.0

Objektorientierte Programmierung

Übung - Datenmigration in Windows 7

Datenbanken. Ein DBS besteht aus zwei Teilen:

7. Übung - Datenbanken

Arbeiten mit dem Outlook Add-In

Objektorientierte Programmierung

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

Prozedurale Datenbank- Anwendungsprogrammierung

CVR Seniorentreff vom 04. und Serienbriefe/Seriendruck. Serienbriefe / Seriendruck

Modellierung und Programmierung 1

Zur Einrichtung der orgamax Cloud auf Ihrem ipad beschreiben wir hier die Vorgehensweise.

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

3 Richtlinienbasierte Verwaltung und Multi-Server- Administration

OP-LOG

mit Musterlösungen Prof. Dr. Gerd Stumme, Dipl.-Inform. Christoph Schmitz 11. Juni 2007

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

Software Engineering Klassendiagramme Assoziationen

DBS ::: SERIE 5. Join Right Semi- Join Left Semi-Join Projektion Selektion Fremdschlüssel. Kreuzprodukt

Anleitung für das Content Management System

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

teischl.com Software Design & Services e.u. office@teischl.com

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS Metadaten

Options- und Freitext-Modul Update-Anleitung

11 Funktionen Vorteile von Funktionen. Leseprobe aus Access und SQL Server

Transkript:

Oracle: Abstrakte Datentypen: Oracle bietet zwei mögliche Arten um abstrakte Datentypen zu implementieren: Varying Array Nested Table Varying Array (kunde) kdnr kdname gekaufteart 1 Mustermann 1 4 5 8 2 Müller 2 5 6 8 Kunde beinhaltet in einem Attribut einen Array (hier: gekaufteart) indem Daten innerhalb eines Feldes gespeichert werden. Nested Table (kunde) kdnr kdname lieferposition 1 Mustermann liefposnr artnr anzahl preis 0 1 2 7.99 1 4 3 3.33 2 5 2 1.23 3 8 1 9.87 2 Müller liefposnr artnr anzahl preis 0 2 6 0.34 1 5 3 1.23 2 6 9 3.40 3 8 1 9.87 Kunde beinhaltet in einem Attribut (hier: lieferposition) eine eingebettete Tabelle 1 / 6

Erstellen eines Varying Array Neuer Objekt Typ muss deklariert werden, der aus einem einfachen Datentyp besteht: CREATE TYPE table_ty AS OBJECT ( Attributname einfacherdatentyp) Aus dem neuen Objekt Typ muss nun ein Varying Array erstellt werden: CREATE OR REPLACE TYPE table_va AS VARRAY(x) OF table_ty [das x in der VARRAY() Klausel gibt die maximale Anzahl an Werte innerhalb des Arrays an] Im letzten Schritt kann der neu erstellte Datentyp in einer jeden Tabelle verwendet werden: CREATE TABLE tablename ( Attributname1 einfacherdatentyp, Attributname2 table_va ) Für das obige Beispiel: CREATE TYPE kunde_ty AS OBJECT ( gekaufteart Integer) CREATE OR REPLACE TYPE kunde_va AS VARRAY(50) OF kunde_ty CREATE TABLE kunde ( kdnr Integer, kdname VarChar2(50), gekaufteart kunde_va ) INSERT Einfügeoperationen in eine Tabelle mit Varying Array funktioniert mit Hilfe eines Konstruktor-Aufrufs. INSERT INTO tablename (Attributname1, Attributname2) VALUES (Wert1, tablename_va(wert2, wert3, wert4,..., wertn)) 2 / 6

Für das Kundenbeispiel: INSERT INTO kunde (kdnr, kdname, gekaufteart) VALUES (3,'Schmitz', kunde_va(5,6,7,8)) SELECT Ein SELECT funktioniert wie ein herkömmliches SELECT, aber um eine TABLE()-Klausel erweitert SELECT B.Attributname, A.* FROM tablename B, TABLE(B.tablename_va) A Für das Kundenbeispiel: SELECT B.kdnr, A.* FROM kunde B, TABLE(B.kunde_va) A Erstellen eines Nested Table Analog zum Varying Array muss zunächst ein neuer Objekt Typ erstellt werden. CREATE TYPE table_ty AS OBJECT ( Attributname einfacherdatentyp) Als nächstes wird anstatt mit der varray-klausel mit dem Schlüsselwort AS TABLE OF gearbeitet. CREATE TYPE table_nt AS TABLE OF table_ty Im letzten Schritt wird wieder die Tabelle angelegt, jedoch diesmal mit expliziter Angabe unter welchem Namen die geschachtelte Tabelle gespeichert werden soll. Man kann hier von Datenkapselung sprechen, da die Daten innerhalb dieser geschachtelten Tabelle nur über ihre übergeordnete Tabelle erreichbar sind. Die Nested Table wird unter dem Attributnamen AttributNameNT in A verwaltet. CREATE TABLE tablename ( Attributname1 einfacherdatentyp, AttributNameNT table_nt ) NESTED TABLE AttributNameNT STORE AS table_nt_tab 3 / 6

Beispiel für obige Kundentabelle: CREATE TYPE kunde_ty AS OBJECT ( liefposnr Integer, artnr Integer, anzahl Integer, preis decimal(10,2) ) CREATE TYPE kunde_nt AS TABLE OF kunde_ty CREATE TABLE kunde ( kdnr Integer, kdname Varchar2(30), lieferposition kunde_nt ) NESTED TABLE lieferposition STORE AS kunde_nt_tab INSERT INSERT INTO tabname VALUES (attribut1, table_nt(table_ty(attribut2, attribut3))) Kundenbeispiel: INSERT INTO kunde VALUES (1,'Schmidt', kunde_nt(kunde_ty(1,13,2,3.56))) Möchte man direkt mehrere Lieferpositionen für einen Kunden einfügen werden diese mit einem Komma separiert. INSERT INTO kunde VALUES (1,'Schmidt', kunde_nt(kunde_ty(1,13,2,3.56), kunde_ty(2,14,9,27.89)) Möchte man noch keine Zeilen in den Nested Table einfügen, muss beim INSERT der Wertauf null gesetzt werden. 4 / 6

INSERT INTO kunde VALUES (1,'Schmidt',null) Einfügen einer neuen Zeile in einen Nested Table INSERT INTO TABLE (SELECT AttributNameNT FROM tablename WHERE attribut1 = wert) VALUES ( table_ty(wert1, wert2,...)) Beispiel: Für Kunde 1 Lieferposition hinzufügen INSERT INTO TABLE (SELECT lieferposition FROM kunde WHERE kdnr = 1) VALUES ( kunde_ty(4,3,5,2.9)) SELECT Zeilen eines Nested Table lassen sich über die TABLE()-Klausel abfragen. Die TABLE()- Klausel ist Bestandteil der FROM-Klausel (wie beim natürlichen JOIN, wo eine zweite Tabelle B Bestandteil der FROM-Klausel war). In der TABLE-Klausel wird der symbolische Tabellenname B mit der NESTED TABLE von A verbunden, die in A unter dem Attributnamen AttributNameNT verwaltet wird. SELECT B.* FROM tablename A, TABLE (A.AttributNameNT) B WHERE A.Attribut = Wert Beispiel 1: Anzeige aller Lieferpositionen des Kunden 2 SELECT B.* FROM kunde A, TABLE (A.lieferposition) B WHERE A.kdnr = 2 Beispiel 2: Anzeige aller Lieferpositionen des Kunden 2 mit Kundendaten SELECT B.*, A.kdnr, A.kdname FROM kunde A, TABLE (A.lieferposition) B WHERE A.kdnr = 2 5 / 6

JDBC-Beispiel für Nested Table Anfrage public static void main(string args[])throws IOException{ // Datenbankverbindung erstellen mit der "connect()"-methode try { Connection con = connect(); // Vorbereitung der JDBC Objekte Statement Stmt; ResultSet RS; String SQL; String kdname; int kdnr, liefposnr, artnr, anzahl; double preis; // Erezeugen eines Statements aus der DB-Verbindung Stmt = con.createstatement(); // Eine SQL Select Anweisung SQL = "SELECT A.kdnr, A.kdname, B.* FROM kunde A, TABLE (A.lieferposition ) B WHERE A.kdnr = 2"; // SQL-Anweisung ausführen und Ergebnis in ResultSet // schreiben RS = Stmt.executeQuery(SQL); // Das ResultSet Datensatzweise durchlaufen while(rs.next()){ kdnr = RS.getInt("kdnr"); kdname = RS.getString("kdname"); liefposnr = RS.getInt("liefposnr"); artnr = RS.getInt("artnr"); anzahl = RS.getInt("anzahl"); preis = RS.getDouble("preis"); } System.out.println("Kundennr. : "+ kdnr); System.out.println("Kundenname: "+ kdname); System.out.println("Lieferpositionsnr: "+liefposnr); System.out.println("Artikelnr: "+artnr); System.out.println("Anzahl: "+anzahl); System.out.println("Preis: "+preis); }... } catch (SQLException e){} 6 / 6