66
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe Fachbereich Informatik Moltkestraße 30 76133 Karlsruhe email: [email protected]

Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Embed Size (px)

Citation preview

Page 1: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 1Vorlesung Datenbanksysteme SS 2002

Sprachschnittstellenvon

Datenbanksystemen

Prof. Klaus GremmingerFachhochschule Karlsruhe

Fachbereich InformatikMoltkestraße 3076133 Karlsruhe

email: [email protected]

Page 2: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 2Vorlesung Datenbanksysteme SS 2002

Structured Query Language2 (SQL92) Java Database Connectivity (JDBC) Einbettung von SQL in Java (SQLJ) Structured Query Language3 (SQL99)

Inhalt

Page 3: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 3Vorlesung Datenbanksysteme SS 2002

Historie

SEQUEL als Anfragesprache des Prototyps System R der Firma IBM (Structured English Query Language)

1981: SQL/Data System als kommerzielles System Heute weit verbreitet IBM, Microsoft, Oracle, Sybase Wachsende Popularität erforderte Standardisierung 1986: ISO-SQL1 (auch SQL86 genannt)

1989: Addendum-1 SQL89 1992: ISO-SQL92 (auch SQL2 genannt, ISO 9075)

2000: SQL99 (ISO 9085)

Page 4: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 4Vorlesung Datenbanksysteme SS 2002

Implementierungsmethoden

Direktes SQLAusführen von SQL-Anweisungen von einem interaktiven Terminal aus

ModulspracheBeschreibung von SQL-Anweisungen in reinem SQL in Form getrennt übersetztem Modul

Call Language Interface (CLI)Aufruf von SQL-Anweisungen der SQL-Implementierung, welche wiederum das DBS mittels dynamischem SQL aufrufen

Embedded SQLEinbettung von SQL-Anweisungen in Hostsprache mit Vorübersetzung (Pre-Compiler)

Page 5: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 5Vorlesung Datenbanksysteme SS 2002

Structured Query Language2 (SQL92)

Bestandteile der Sprache Datendefinition (DDL) Datenmanipulation (DML) Datenkontrolle (DCL)

Die weiteren Ausführungen basieren auf SQL92. Neu: Zusätzliche Datentypen Auf-/Abbau von Client-Server-Verbindungen Unterstützung von dynamischem SQL Scrollbare Cursor Outer-Joins Intersect- und Minus-Mengenoperationen

Page 6: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 6Vorlesung Datenbanksysteme SS 2002

Datentypen

integer (oder auch integer4) smallint (oder auch integer2) numeric(p,q) float(p) character(n), character varying(n) oder varchar(n) bit(n), bit varying(n) date, time, timestamp blob (raw), clob (binary oder character large object)

Page 7: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 7Vorlesung Datenbanksysteme SS 2002

Datendefinition

Schemadefinition Tabellendefinition Integritätsbedingungen Sichten

Page 8: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 8Vorlesung Datenbanksysteme SS 2002

Schemadefinition

SQL-Objekte können u.a. seinDomain-, Tabellen-,View-, Rechte-, Bedingungs-Definition

Benannte Sammlung von SQL-Objekten innerhalb eines Katalogs heißt Schema

Benannte Sammlung von SQL-Schemata innerhalb einer SQL-Umgebung heißt Katalog

CREATE SCHEMA[schema-name][AUTHORIZATION user-name][DEFAULT CHARACTER SET character-set][list-of-schema-objects]

Page 9: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 9Vorlesung Datenbanksysteme SS 2002

Tabellendefinition

Anlegen einer neuen Tabelle:CREATE TABLE Professoren(PersNr INTEGER NOT NULL, Name VARCHAR(10) NOT NULL, Rang CHAR(2) );

Hinzufügen neuer Spalten:ALTER TABLE Professoren

ADD (Raum INTEGER); Verändern des Wertebereichs einer Spalte:

ALTER TABLE ProfessorenMODIFY (Name VARCHAR(20));

Page 10: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 10Vorlesung Datenbanksysteme SS 2002

Integritätsbedingungen Attribut-Bedingung: UNIQUE, NOT UNIQUE Primärschlüssel-Definition

CREATE TABLE Studenten(MatrNr INTEGER PRIMARY KEY...);CREATE TABLE hören(MatrNr ..., VorlNr ..., PRIMARY KEY(MatrNr, VorlNr));

Fremdschlüssel-DefinitiongelesenVon REFERENCES Professoren

ON DELETE SET NULLCONSTRAINT Ticket_fk FOREIGN KEY(Nation, PassNr) REF...

Check-KlauselCREATE TABLE prüfen... Note NUMBER(2,1) CHECK(Note BETWEEN 0.7 AND 5.0),

Page 11: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 11Vorlesung Datenbanksysteme SS 2002

Sichten

Virtuelle Tabellen Berechnung der „Tupel“ zur Laufzeit Zur Anpassung an spezielle Benutzerbedürfnisse und

zum Datenschutz Zum Verbergen von komplexen Datenstrukturen

(z.B. Primär-Fremdschlüssel-Beziehungen) Beispiel:

CREATE VIEW Prüfungen ASSELECT MatrNr, VorlNr, PersNrFROM prüfen;

SELECT *FROM Prüfungen;

Page 12: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 12Vorlesung Datenbanksysteme SS 2002

Datenmanipulation

Einfügen von Zeilen:INSERT INTO Professoren

VALUES(1,‘Gremminger‘,‘C3‘,309);INSERT INTO Professoren (Name, PersNr)

VALUES (‘Gmeiner‘,2); Verändern von Zeilen:

UPDATE ProfessorenSET Rang = ‘C3‘ WHERE Name = ‘Gremminger‘;

Löschen von Zeilen:DELETE FROM Vorlesungen;DELETE FROM Vorlesungen WHERE gelesenVon = 1;

Page 13: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 13Vorlesung Datenbanksysteme SS 2002

Die SELECT-Anweisung

Erstellt eine Ergebnismenge in Form einer TabelleSelect [All | Distinct] {(Pseudo-) Spaltenliste | *} [Spaltenalias]From Tabellenliste [Tabellenalias][Where Bedingungen auf Zeilen][Group By Gruppen][Having Bedingungen auf Gruppen][{Union | Intersect | Minus} Abfrage][Order By Sortierspalten]

Abarbeitung Bilde das kartesische Produkt der Tabellen in der From-Klausel Wähle hieraus die Spalten der Tupel aus, die in der Select-Klausel

aufgeführt sind

Page 14: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 14Vorlesung Datenbanksysteme SS 2002

Operatoren und (Aggregat-) Funktionen

Arithmetische Operatoren: +,-,*./ Zeichenketten-Operatoren: || Funktionen

to_number, to_char, to_date nvl, decode count, distinct, max, min, sum, avg

Beispiele: SELECT Nation || PassNr

FROM FlugGast; SELECT COUNT(DISTINCT name)

FROM Stadt;

Page 15: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 15Vorlesung Datenbanksysteme SS 2002

WHERE-Klausel

Auswahlbedingungen auf Zeilen Vergleichsoperatoren

=,<>,>,,>=,<= LIKE BETWEEN AND [NOT] IN IS [NOT] NULL

Beispiele: ... WHERE FlzTypus = ‘747‘ OR Hersteller LIKE ‘B%‘ ... WHERE FlugGes IN (‘LH‘, ‘BA‘,‘TA‘);

Page 16: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 16Vorlesung Datenbanksysteme SS 2002

ORDER BY-Klausel

Geordnete Anzeige der Anfrageergebnisse Beispiele:

SELECT PLZ, Name, EinwohnerFROM StadtORDER BY PLZ ASC;

SELECT Semester, Name, AnschriftFROM StudentORDER BY Semester DESC, Name ASC;

Page 17: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 17Vorlesung Datenbanksysteme SS 2002

GROUP BY-Klausel Zusammenfassung von Tupeln, welche in einer ausgewählten

Attributkombination den gleichen Wert aufweisen. Dieser Wert erscheint in der Basistabelle in mehreren Zeilen, in

der gruppierten Ergebnistabelle nur noch einmal. In der SELECT-Klausel darf projeziert werden auf

Attribute, auf die gruppiert wird Gruppenfunktionen, angewendet auf andere Attribute der

Basistabelle Konstante

Beispiel:SELECT gelesenVon, SUM( SWS )FROM VorlesungenGROUP BY gelesenVon;

Page 18: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 18Vorlesung Datenbanksysteme SS 2002

HAVING-Klausel

Ähnlich der WHERE-Klausel können an die mit GROUP BY gebildeten Gruppen zusätzliche Bedingungen gestellt werden

Beipiele: SELECT gelesenVon, SUM( SWS)

FROM VorlesungenGROUP BY gelesenVonHAVING AVG( SWS ) > 3;

SELECT Name, SUM( SWS)FROM Vorlesungen, ProfessorenWHERE gelesenVon = PersNrGROUP BY NameHAVING AVG( SWS ) > 3;

Page 19: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 19Vorlesung Datenbanksysteme SS 2002

Geschachtelte Abfragen (subqueries)

Bisher: Festlegung der WHERE-Klausel mit einer (Menge von) Konstanten

„Zu welchen Flugcoupons gibt es keine Flugtickets?“ SELECT AusstGes, AusstNr

FROM FlCoupon; SELECT AusstGes, AusstNr

FROM FlTicketWHERE AusstGes <> ... AND AusstNr <> ... ;

Jetzt: Definition einer kompletten SQL-Anfrage mit Rückgabe der Ergebnismenge als Vergleichswerte an die äußere WHERE-Klausel

Page 20: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 20Vorlesung Datenbanksysteme SS 2002

Geschachtelte Abfragen (Forts.)

Beispiele: SELECT AusstGes, AusstNr

FROM FlTicketWHERE (AusstGes, AusstNr) NOT IN

(SELECT AusstGes, AusstNr FROM FlCoupon );

SELECT NameFROM ProfessorenWHERE PersNr NOT IN

(SELECT gelesenVon FROM Vorlesungen);

Page 21: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 21Vorlesung Datenbanksysteme SS 2002

Der Existenzquantor EXISTS

Liefert TRUE, wenn eine Unterabfrage keine leere Ergebnismenge zurückgibt, sonst FALSE

Beispiel: „Professoren, die keine Vorlesungen halten“

SELECT NameFROM ProfessorenWHERE NOT EXISTS

(SELECT * FROM Vorlesungen WHERE gelesenVon = PersNr );

Page 22: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 22Vorlesung Datenbanksysteme SS 2002

Mengen-Operationen

Verknüpfung der Ergebnisse von SELECT-Anfragen Operationen: INTERSECT, UNION, MINUS Beispiel:

„Flugplätze, auf denen Flüge starten und landen“SELECT AbFlPlatzFROM FlStreckeWHERE AbFlPlatz IS NOT NULLINTERSECTSELECT AnFlPlatzFROM FlStreckeWHERE AnFlPlatz IS NOT NULL;

Page 23: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 23Vorlesung Datenbanksysteme SS 2002

Verbindung mehrerer Tabellen (JOIN)

Grundlage: Primär-Fremdschlüssel-Beziehungen CROSS, NATURAL, INNER, LEFT OUTER, RIGHT

OUTER, FULL OUTER, UNION-JOIN Beispiele:

SELECT G.FlugGes ‘Kürzel‘, Name ‘Gesellschaft‘,AbFlPlatz ‘Start‘, AnFlPlatz ‘Ziel‘

FROM FlGes G INNER JOIN FlStrecke SON G.FlugGes = S. FlugGes;

SELECT P.PersNr, P.Name, V.TitelFROM Professoren P LEFT OUTER JOIN

Vorlesung V ON P.PersNr = V.gelesenVon;

Page 24: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 24Vorlesung Datenbanksysteme SS 2002

Rechte

Regeln den Zugang (Authentifizierung) und den Zugriff auf die Objekte in der Datenbank (Autorisierung)

Beispiele: GRANT CONNECT, RESOURCE

TO EmilIDENTIFIED BY lime;

GRANT SELECTON FlCoupon, FlGastTO Max, Moritz:

REVOKE UPDATE( Preis )ON FlTicketTO Max;

Page 25: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 25Vorlesung Datenbanksysteme SS 2002

JavaDataBaseConnectivity (JDBC)

Allgemeine Datenbank-Zugriffsschnittstelle für SQL (aktuelle Version 2.1)

Übertragung der JAVA-Portabilität auf Datenbanken Teil von Java 2 (JDK1.2, Package java.sql) Basiert auf X/Open SQL CLI (und damit ODBC) Übersichtlicher und einfacher benutzbar als ODBC Unterstützt ANSI SQL92-Basisfunktionalität Erlaubt dynamische SQL-Anweisungen

Page 26: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 26Vorlesung Datenbanksysteme SS 2002

Beziehungen zwischen den Interfaces

getConnection

DriverManagerDriverManager

ConnectionConnection PreparedStatementPreparedStatement

StatementStatement

CallableStatementCallableStatement Datentypen: Date, Time, TimeStamp, Numeric, Java Datentypen, etc.

Datentypen: Date, Time, TimeStamp, Numeric, Java Datentypen, etc.

ResultSetResultSetexecuteQuery

prepareCall

prepareStatement

createStatement

getXXX

getXXX

getMoreResults

executeQuery

setXXX

Funktionen

weitere Methoden

Unterklasse

execute

commit, rollback

Page 27: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 27Vorlesung Datenbanksysteme SS 2002

Das JDBC API

java.sql.DriverManager java.sql.Connection java.sql.Statement java.sql.ResultSet java.sql.SQLException java.sql.Date, java.sql.Timestamp java.sql.DatabaseMetaData,

java.sql.ResultSetMetaData

Page 28: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 28Vorlesung Datenbanksysteme SS 2002

Abbildung SQL- auf Java-DatentypenSQL-Datentyp Java-Datentyp

CHAR String

VARCHAR String

LONGVARCHAR String

NUMERIC java.sql.Bignum

DECIMAL java.sql.Bignum

BIT boolean

TINYINT byte

SMALLINT short

INTEGER int

BIGINT long

REAL float

FLOAT double

DOUBLE double

BINARY byte[]

VARBINARY byte[]

LONVARBINARY byte[]

DATE java.sql.Date

TIME java.sql.Time

TIMESTAMP java.sql.Timestamp

Page 29: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 29Vorlesung Datenbanksysteme SS 2002

Java Database Connectivity (JDBC)Java Applikation

JDBC Manager

JDBC NetTreiber

Treiber fürJDBC-ODBC Bridge

Treiber fürODBC und DB

Treiber A Treiber B

ÖffentlichesProtokoll

Datenbankabhängige Zugriffsprotokolle

JDBC API

JDBC Treiber API

...

JDBCImplementierungs-

alternativen

Page 30: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 30Vorlesung Datenbanksysteme SS 2002

JDBC-Treiber-Implementierung

JDBC-ODBC-Bridge (Typ 1) Nutzen vorhandener ODBC-Treiber Wegen Binärcode keine Eignung für Web-Anwendungen

Native-API-Treiber (Typ 2) Basiert auf Bibliotheken des DBMS-Herstellers Wegen Binärcode keine Eignung für Web-Anwendungen

JDBC-Net-Treiber (Typ 3) Aufteilung Treiber in JDBC-Client und JDBC-Server JDBC-Client kann vollständig in Java realisiert werden

Native-Protokoll-Treiber (Typ 4) Direkte Übersetzung der JDBC-Aufrufe in DBS-Aufrufe Client direkt mit Datenbankserver verbunden Nachteilig sind die i.A. proprietären DBS-Protokolle

Page 31: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 31Vorlesung Datenbanksysteme SS 2002

Ablauf einer JDBC-Anwendung

Aufbau einer Verbindung zur Datenbank Explizites Laden eines Datenbanktreibers Automatisches Laden eines Datenbanktreibers

(sql.drivers) Verbindungsaufbau mit UserID und Passwort

Senden einer SQL-Anweisung Erzeugung einer SQL-Anweisung

Verarbeiten der Anfrageergebnisse Über Resultset-Objekt nach dem Cursor-Prinzip

Page 32: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 32Vorlesung Datenbanksysteme SS 2002

Aufbau einer Verbindung zur Datenbank

import java.net.URL;import java.sql.*;

class JDBCExample {public static void main (String args[]) {

try { // jdbc-odbc-bridge Treiber ladenClass.forName (“sun.jdbc.odbc.JdbcOdbcDriver”);

String url = “jdbc:odbc:thin:@nero:4711:demoDb”;Connection con = DriverManager.getConnection

(url,‘userid‘, ‘password‘); }}

}

import java.net.URL;import java.sql.*;

class JDBCExample {public static void main (String args[]) {

try { // jdbc-odbc-bridge Treiber ladenClass.forName (“sun.jdbc.odbc.JdbcOdbcDriver”);

String url = “jdbc:odbc:thin:@nero:4711:demoDb”;Connection con = DriverManager.getConnection

(url,‘userid‘, ‘password‘); }}

}

Page 33: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 33Vorlesung Datenbanksysteme SS 2002

Senden einer SQL-Anweisung

// Suche eines Kunden

String stmtSelect = “SELECT KundenNr FROM Kunden“+

“WHERE Nachname = ‘Gremminger’;“;

// Anweisung erzeugen

Statement stmt = con.createStatement( );// Select -Anweisung ausführen

resultSet rs = stmt.executeQuery( stmtSelect );

// SQL-Anweisungen ohne Resultset// Tabelle erzeugen

stmt.executeUpdate( stmtcreate );// Datensatz in Tabelle einfügen

int rowcount = stmt.executeUpdate( stmtInsert)

// Suche eines Kunden

String stmtSelect = “SELECT KundenNr FROM Kunden“+

“WHERE Nachname = ‘Gremminger’;“;

// Anweisung erzeugen

Statement stmt = con.createStatement( );// Select -Anweisung ausführen

resultSet rs = stmt.executeQuery( stmtSelect );

// SQL-Anweisungen ohne Resultset// Tabelle erzeugen

stmt.executeUpdate( stmtcreate );// Datensatz in Tabelle einfügen

int rowcount = stmt.executeUpdate( stmtInsert)

Page 34: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 34Vorlesung Datenbanksysteme SS 2002

Verarbeiten der Anfrageergebnisse

// Zeilenweiser Zugriff auf Ergebnismenge, Cursor zeigt vor 1. Zeile

while (rs.next () ) {

// Spaltenweiser Zugriff auf die aktuelle Zeile mittels

// getXXX-Methoden und Index der Spalte oder Spaltennamen

String s = rs.getString (1);

double d = rs.getDouble (2);

int i = rs.getInt (3);

System.out.println (s + ‘ ‘ + d + ‘ ‘ + i);

}// Freigabe der benutzten Ressourcen

rs.close;

// Zeilenweiser Zugriff auf Ergebnismenge, Cursor zeigt vor 1. Zeile

while (rs.next () ) {

// Spaltenweiser Zugriff auf die aktuelle Zeile mittels

// getXXX-Methoden und Index der Spalte oder Spaltennamen

String s = rs.getString (1);

double d = rs.getDouble (2);

int i = rs.getInt (3);

System.out.println (s + ‘ ‘ + d + ‘ ‘ + i);

}// Freigabe der benutzten Ressourcen

rs.close;

Page 35: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 35Vorlesung Datenbanksysteme SS 2002

Fehlerbearbeitung

// Fehler werden als Ausnahmen (Exceptions) der Klasse SQLException

// signalisiert

try {

// Aufruf von JDBC-Anweisungen, die Exception generieren

} catch (SQLException exc) {

System.out.println (‘SQLException: ‘ + exc.getMessage () );

}

// Fehler werden als Ausnahmen (Exceptions) der Klasse SQLException

// signalisiert

try {

// Aufruf von JDBC-Anweisungen, die Exception generieren

} catch (SQLException exc) {

System.out.println (‘SQLException: ‘ + exc.getMessage () );

}

Page 36: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 36Vorlesung Datenbanksysteme SS 2002

Verbindungen und Transaktionen

Es sind mehrere Verbindungen zu einer oder mehreren Datenbanken möglich (con1, con2, ... conn)

Auswahl des Datenbankbereichs über Tripel Katalogname, Schemaname, Objektname(con.setCatalog( ... ))

Transaktionssteuerung erfolgt auf aktiver Verbindung Commit/Rollback (con.rollback( ))

AutoCommit (con.setAutoCommit( false )

Lesetransaktion (con.setReadOnly( true ))

Isolationlevel(con.setTransactionIsolationlevel( Transaction_Serializable ))

Page 37: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 37Vorlesung Datenbanksysteme SS 2002

Connection Pooling

Reduktion der Zeiten für DB-Verbindungsaufbau/-abbau Ein Connection Pool ist ein Puffer von DB-Verbindungen Logische und physische DB-Verbindungen

Instanzen von java.sql.Connection und java.sql.PooledConnection

PooledConnection pcon = datastore.getPooledConnection ();Connection con = pcon.getConnection ();con.close;

Vorteilhaft für mehrstufige Systemarchitekturen Web-Applikation mit Servlets und JDBC Applikationsserver für EJB

Page 38: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 38Vorlesung Datenbanksysteme SS 2002

Gespeicherte Prozeduren

Ausführung von in der Datenbank gespeicherten Prozeduren

Form: (call ProcedureName( Par1, Par2, ... ) Eingabeparameter müssen vor Ausführung der

Anweisung initialisiert werden Ausgabeparameter müssen vor Ausführung der

Anweisung registriert werden Rückgabe der Werte mit get-Operationen:

getString, getDouble, getDate, getTimestamp, ...

Page 39: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 39Vorlesung Datenbanksysteme SS 2002

Programmierung Stored Procedures

// Anweisung zum Aufruf der Prozedur HoleKundenNr

String stmtCall = “(call HoleKundenNr(?,?))”;// Call vorbereiten

stmt = con.prepareCall( stmtCall );

// IN-Parameter setzen

stmt.setString( 1, ‘Gremminger’ );// Registrieren 2. Platzhalter als OUT-Parameter

stmt.RegisterOutParameter( 2, java.sql.types.INTEGER );

// Anweisung ausführen

stmt.executeQuery( );

int Kundennummer = stmt.getInt( 2 );

// Anweisung zum Aufruf der Prozedur HoleKundenNr

String stmtCall = “(call HoleKundenNr(?,?))”;// Call vorbereiten

stmt = con.prepareCall( stmtCall );

// IN-Parameter setzen

stmt.setString( 1, ‘Gremminger’ );// Registrieren 2. Platzhalter als OUT-Parameter

stmt.RegisterOutParameter( 2, java.sql.types.INTEGER );

// Anweisung ausführen

stmt.executeQuery( );

int Kundennummer = stmt.getInt( 2 );

Page 40: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 40Vorlesung Datenbanksysteme SS 2002

Dynamische SQL-Anweisungen

Ausführung von nicht vorübersetzten SQL-Anweisungen

Die SQL-Anweisung enthält als Platzhalter das Zeichen “?”

Platzhalter werden mittels set-Operationen und Bezug auf eine Position gesetzt:setString, setByte, setShort, setFloat, ...

Page 41: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 41Vorlesung Datenbanksysteme SS 2002

Programmierung dynamischer SQL

PreparedStatement stmt = null;// Such-Anweisung

String stmtSelect = “SELECT KundenNr, Nachname“+

“FROM Kunden“+

“WHERE Nachname = ?;“;

// Select-Anweisung vorbereiten

stmt = con.prepareStatement( stmtSelect );// Gesuchten Nachnamen einsetzen

stmt.setString( 1, “Gremminger” );// Select-Anweisung ausführen

ResultSet rset = stmt.executeQuery( );

PreparedStatement stmt = null;// Such-Anweisung

String stmtSelect = “SELECT KundenNr, Nachname“+

“FROM Kunden“+

“WHERE Nachname = ?;“;

// Select-Anweisung vorbereiten

stmt = con.prepareStatement( stmtSelect );// Gesuchten Nachnamen einsetzen

stmt.setString( 1, “Gremminger” );// Select-Anweisung ausführen

ResultSet rset = stmt.executeQuery( );

Page 42: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 42Vorlesung Datenbanksysteme SS 2002

Einbettung von SQL in Java (SQLJ)

Statische SQL-Anweisungen werden in den Java-Quelltext eingebettet

SQL-Anweisungen werden zur Übersetzungszeit definiert Einzige Variabilität sind Parameter Übersetzung durch Präcompiler (Translator) in Aufrufe

des SQLJ-Laufzeitsystems und SQLJ-Profile SQLJ-Laufzeitsystem (Package sqlj.runtime) benutzt

i.d.R. JDBC-Aufrufe Translator führt syntaktische und semantische

Überprüfungen durch

Page 43: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 43Vorlesung Datenbanksysteme SS 2002

Programmierprinzip

Codierung Java-Quelltext mit SQLJ

Java-Quelltext

Bytecode

Translator

Java-Compiler

.sqlj

.java

.class

SQLJ-Profil

SQLJ-Laufzeitsystem

JDBC

SQLJCode

JavaCode

JavaByteCode

RunProgram

Page 44: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 44Vorlesung Datenbanksysteme SS 2002

SQLJ-Konventionen

SQLJ-Quelltexte besitzen die Endung “.sqlj“ Anweisungen beginnen mit “#sql“ und werden in

geschweifte Klammern gesetzt #sql { INSERT INTO book VALUES

(‘3-932588-13-4‘, ‘Oracle 8‘, 1, 3, 68.00); }

Anweisungen werden mit “;“ abgeschlossen Verbindung zur Datenbank mittels JDBC-

Mechanismen Es ist eine Default-Verbindung zu definieren

Page 45: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 45Vorlesung Datenbanksysteme SS 2002

Host-Variablen

In allen Embedded SQL-Lösungen Sind Variablen der Hostsprache Werden mit ":“ gekennzeichnet

String findBook (String isbn) throws SQLException { String title; #sql { SELECT title INTO :title FROM book WHERE isbn = :isbn }; return title; }

Dienen der Datenkommunikation zwischen SQL und der Host-Programmiersprache (IN, OUT, INOUT)

Es sind Host-Ausdrücke erlaubt#sql price { VALUES (compute_price (:IN orderNo) ) };

Page 46: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 46Vorlesung Datenbanksysteme SS 2002

Cursor-Konzept

Zugriff auf Mengen von Ergebnistupeln

In SQLJ Iteratoren Vergleichbar Resultsets von

JDBC Spaltentypen zur Über-

setzungszeit festgelegt Arten

benannter Iterator Positionsiterator

Datenbank

SQL

Anwendungsprogramm

Cursor

Java

Page 47: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 47Vorlesung Datenbanksysteme SS 2002

Namens-Iterator

Spalten werden über Namen gebunden

#sql public iterator PersIter (string Name, int Jahr);

PersIter iter;

String Name = null;

int Jahr = 0;

#sql iter ={SELECT Name, Jahr FROM Personen}

while (iter.next()) {

Name = iter.name();

Jahr = iter.Jahr();

}

iter.close();

DeklarationIterator-Variable

DeklarationIterator-Klasse

Iterator-Methoden

InstanziierungIterator-Objekt

FreigebenRessourcen

Page 48: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 48Vorlesung Datenbanksysteme SS 2002

Positions-Iterator

Spalten werden über Position gebunden

#sql public iterator PersIter (string, int);

PersIter iter;

String Name = null;

int Jahr = 0;

#sql iter ={SELECT Name, Jahr FROM Personen}

while (true) {

#sql {FETCH :iter INTO :Name, :Jahr};

if (iter.endFetch()) break;

}

iter.close();

Auslesen überHost-Variablen

Page 49: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 49Vorlesung Datenbanksysteme SS 2002

Transaktionssteuerung

Basiert auf den JDBC-Mechanismen Manuelle Kontrolle

#sql { COMMIT };

Festlegung des Zugriffsmodus#sql { SET TRANSACTION READ ONLY };

Festlegung des Isolationlevels#sql { SET TRANSACTION READ WRITE ISOLATIONLEVEL SERIALIZABLE };

Page 50: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 50Vorlesung Datenbanksysteme SS 2002

Kontexte

Verbindungskontext beschreibt Datenbankverbindung Pro Verbindung ein Kontext-Objekt

Connection con = DriverManager.getConnection (url, uid, pwd);DefaultContext ctx = new DefaultContext( con );DefaultContext.setDefaultContext( ctx );

Umschaltung auf KontextDefaultContext.setDefaultContext( ctx1 );#sql { SQL-Operations };

alternativ: #sql [ctx1] { SQL-Operation };#sql [ctx2] { SQL-Operation };

Ausführungskontextctx.getExecutionContext().setQueryTimeout( 5 );#sql [ctx] { SQL-Operation };

Page 51: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 51Vorlesung Datenbanksysteme SS 2002

SQLJ-Translator

Aufgaben Syntaktische und semantische Überprüfungen Ersetzung SQLJ-Klauseln Code-Generierung für Iterator- , ...-Klassen Erzeugung von Profilen

Profil enthält pro SQL-Anweisung Informationen über die SQL-Operationen, Typ und Übergaberichtung von Parametern und Ergebnisdaten

Offline- vs. Online-Prüfung Implementierung als Kommandozeilenwerkzeug sqlj

oder integriert in Java-Entwicklungsumgebung

Page 52: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 52Vorlesung Datenbanksysteme SS 2002

Interoperabilität mit JDBC

Notwendig für Anwendungen, welche sowohl statisches als auch dynamisches SQL benötigen

Interoperabilität betrifft Konvertierung Verbindungskontext/JDBC-Verbindung Konvertierung Iterator/ResultSet

Beispiel:

ResultSetIterator iter;#sql iter = { SQL-Operation };ResultSet rs = iter.getResultSet ();

Page 53: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 56Vorlesung Datenbanksysteme SS 2002

Beispiel aus Flugbuchungssystem (FBS)

Hauptprogramm

SQL-Schnittstelle

Ergebnis Pre-Compiler

Programmiersprache Java

Page 54: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 57Vorlesung Datenbanksysteme SS 2002

SQLJ vs. JDBC

SQLJ knapp und bündig bettet statisches SQL in Java ein #sql {INSERT INTO Angestellte VALUES(:n) };

JDBC flexibel performant bettet dynamisches SQL in Java ein Statement stmt = con.prepareStatement

(“INSERT INTO Angestellte VALUES (?)“);stmt.setInt(1,n);stmt.execute;

Page 55: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 58Vorlesung Datenbanksysteme SS 2002

Funktionale Erweiterungen des relationalen Datenmodells Integration von objektorientierten Konzepten zur Datenmodellierung in

das relationale Datenmodell Große Objekte (Large Object, LOB): Größe bis einige GBs Geschachtelte Relationen: direkte Aufnahme von Wiederholungsgruppen Typdeklarationen (User Defined Types, UDT): anwendungsspez. Typen Referenzen: Erweiterung des Fremdschlüssel-Konzeptes Pfadausdrücke: ergeben sich wegen Referenzattribute Objektidentität: i.Ggs. zu relationalen Primärschlüsseln Operationen: Realisierung direkt in SQL oder extern in einer prozeduralen

Programmiersprache Vererbung: realisiert Generalisierung und Spezialisierung

Die SQL99-Standardisierung definiert ein standardisiertes objekt-relationales Datenmodell

Achtung: heutige relationale DBS benutzen oft uneinheitliche Syntax

Structured Query Language3 (SQL99)

Page 56: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 59Vorlesung Datenbanksysteme SS 2002

LOBs

RDBMS speichern mittlerweile auch „frühere Dateien“ wie Fotografien, Audiodaten, Videosequenzen, Textdokumente etc.

Für die Speicherung solcher Daten werden Large Objects (LOBs) standardisiert

CLOB Character Large Object zur Speicherung langer Texte (z.B. Lebenslauf) Spezielle Zugriffsunterstützung

BLOB Binary Large Objects zur Speicherung/Archivierung nicht zu

interpretierender Daten (z.B. Passfoto (2MB)) NCLOB

National Clob (deshalb wie Clobs) allerdings zur Speicherung von Texten mit Sonderzeichen (z.B. Unicode)

Page 57: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 60Vorlesung Datenbanksysteme SS 2002

Einfache Benutzer-definierte Datentypen

Mit vordefinierten Datentypen lassen sich i.d.R. nicht alle anwendungsspezifischen Anforderungen abdecken

Distinct Types basieren auf einem im Datenmodell eingebauten Typ Verhindern, dass Attributwerte semantisch falsch verwendet werden

create final type NotenTyp as decimal(3,2) with comparisons;

create table prüfen(MatrNr int,VorlNr int,PersNr int,Note NotenTyp);

insert into prüfen values( 4711, 2, 12345, NotenTyp( 1.00 ) );

create function NotenDurchschnitt( NotenTyp ) returns NotenTypsource avg( decimal() );

Page 58: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 61Vorlesung Datenbanksysteme SS 2002

Benutzerdefinierte strukturierte Objekttypen

create or replace type VorlesungenTyp;

create or replace type VorlRefListenTyp as table of ref VorlesungenTyp;

create or replace type VorlesungenTyp as object(VorlNr number,Titel varchar(20),SWS number,gelesenVon ref ProfessorenTyp,Voraussetzungen VorlRefListenTyp,member function DurchfallQuote return number,member function AnzHörer return int

);

4711 VIS 2

0815 DBS 4

VorlNr Titel SWS gelesenVon Voraussetzungen

Vorlesungen

Page 59: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 62Vorlesung Datenbanksysteme SS 2002

Benutzerdefinierte strukturierte Objekttypen (Forts.)

create table Vorlesungen of VorlesungenTypnested table Voraussetzungen store as Vorgaenger;

insert into Vorlesungenselect 0815, ‘DBS‘, 4, ref(p), VorlRefListenTyp()from Professoren pwhere name = ‘Gremminger‘;

insert into Vorlesungenselect 4711, ‘VIS‘, 2, ref(p), VorlRefListenTyp()from Professoren pwhere name = ‘Gremminger‘;

/* Die Vorlesung VIS baut auf DBS auf */insert into table

(select nachf.Voraussetzungen from Vorlesungen nachf where nachf.titel = ‘VIS‘)

select ref(vorg) from Vorlesungen vorg where vorg.titel = ‘DBS‘

Page 60: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 63Vorlesung Datenbanksysteme SS 2002

Geschachtelte Objekt-Relationen

Schachtelung von Objekten (nicht nur Referenzen)in einem Objekt

Bietet sich bei schwachen Entitätstypen/Kompositionen an

MatrNr Name Semester hört absolviertePrüfungen

Studenten

Inhalt Prüfer Note Datum

12345 Max 4 .........

1.3B

3.3

23456 Moritz 3......

1.05.0

...

Page 61: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 64Vorlesung Datenbanksysteme SS 2002

Geschachtelte Objekt-Relationen (Forts.)

create or replace type PrüfungenTyp as object (Inhalt ref VorlesungenTyp,Prüfer ref ProfessorenTyp,Note NotenTyp,Datum date,member function verschieben(neuerTermin date)return date

);

create or replace type PrüfungsListenTyp as table of PrüfungenTyp;

create or replace type StudentenTyp as object(MatrNr number,Name varchar(20),Semester number,hört VorlRefListenTyp,absolviertePrüfungen PrüfungslistenTyp,member function Notenschnitt return number,member function SummeWochenstunden return number

);

Page 62: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 65Vorlesung Datenbanksysteme SS 2002

Geschachtelte Objekt-Relationen (Forts.)

create table Studenten of StudentenTyp (MatrNr primary key)nested table hört store as Belegung,nested table absolviertePrüfungen store as Examen;

insert into Studenten values(12345, ‘Max‘, 4, VorlRefListenTyp(), PrüpfungsListenTyp());)

insert into Studenten values(23456, ‘Moritz‘, 3, VorlRefListenTyp(), PrüpfungsListenTyp());)

insert into table(select s.absolviertePrüfungen from Studenten s where s.Name = ‘Moritz‘) values ((select ref(v)from Vorlesungen v where v.Titel = ‘DBS‘), (select ref(p)from Professoren p where p.Name = ‘Gremminger‘),

1.0, Sysdate);

Page 63: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 66Vorlesung Datenbanksysteme SS 2002

Geschachtelte Objekt-Relationen (Forts.)

/* Implementierung von Member-Funktionen */create or replace type body StudentenTyp as

member function SummeWochenstunden return number is i integer;vorl VorlesungenTyp;total number := 0;begin

for i in 1..self.hört.count loopUTL_REF.SELECT_OBJECT(hört(i),vorl);total := total+vorl.SWS;

end loop;return total;

end;...

end;

/* Aufruf von Member-Funktionen */select s.Name, s.SummeWochenstunden()from Studenten s;

/* Ausgabe einer geschachtelten Relation */select s.Name, p.Prüfer.Name, p.Inhalt.Titel, p.Notefrom Studenten s, table(s.absolviertePrüfungen) p;

Page 64: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 67Vorlesung Datenbanksysteme SS 2002

(Einfache) Vererbung von SQL-Objekttypen

create type AngestelltenTyp as(PersNr int, Name varchar(20))instantiable;

create type ProfessorenTyp under AngestelltenTyp (Rang char(2), Raum int);

alter type ProfessorenTypadd method anzMitarbeiter()returns intlanguage SQLcontains SQLreads SQL data;

create table Angestellten of AngestelltenTyp;

create table Professoren of ProfessorenTypunder Angestellteninherit select privileges;

Page 65: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 68Vorlesung Datenbanksysteme SS 2002

(Einfache) Vererbung von SQL-Objekttypen (Forts.)

create method anzMitarbeiter()for ProfessorenTypreturn (select count(*)

from Assistentenwhere Boss->PersNr = self..PersNr);

insert into Professoren values(4711, ‘Gremminger‘, ‘C3‘, 310);

/* Ausgabe aller Professoren und Assistenten */select a.Name, a.PersNrfrom Angestellten a;

Select a.Name,a.Boss->Name as Chef,a.Boss->anzMitarbeiter as anzJünger

From Assistenten a;

Page 66: Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe

Prof. K. Gremminger Folie 69Vorlesung Datenbanksysteme SS 2002

Komplexe Attributtypencreate type NotenTyp as

(NumWert decimal(3,2), Land varchar(20), StringWert varchar(20));

create type US_NotenTyp under NotenTyp as(WithHonours char(1));

create table Leistungen (Teilnehmer varchar(20),Lehrveranstaltung varchar(20),Note NotenTyp);

insert into Leistungen values(‘Egon’, ‘Java’, US_NotenTyp() ..Land(‘USA’) ..NumWert(4.0) ..StringWert(‘excellent’) ..withHonours(‘y’));

select Teilnehmer, Lehrveranstaltung, Note..Land, Note..NumWertfrom Leistungen;