Übung Datenbanksysteme I Embedded SQL, Stored Procedures, JDBC

Slides:



Advertisements
Ähnliche Präsentationen
Object Relational Mapping
Advertisements

Vorlesung Datenbank-programmierung
1 Kapitel 9: Datenbankapplikationen. 2 Datenbankapplikationen MS Access Embedded SQL JDBC Application JDBC Applet Java Servlet Java Server Pages Cold.
1 Datenbankapplikationen 9.1MS Visio 9.2MS Access 9.3Embedded SQL 9.4JDBC 9.5Cold Fusion 9.6PHP.
MySQL.
Allgemeine Technologien II
Anbindung an Anwendungen
Java: Dynamische Datentypen
FH-Hof SQLJ Richard Göbel. FH-Hof SQLJ - Idee Erweiterung von Java um SQL Die Verwendung von SQL-Anweisungen innerhalb einer Programmiersprache wird vereinfacht.
Java: Grundlagen der Sprache
SQL als Abfragesprache
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Programmierung von Datenbank Anwendungen
Dynamische Webseiten mit PHP
Oracle PL/SQL Server Pages (PSP). © Prof. T. Kudraß, HTWK Leipzig Grundidee: PSP – Internet-Seiten mit dynamischer Präsentation von Inhalten durch Einsatz.
Open Database Connectivity (ODBC). © Prof. T. Kudraß, HTWK Leipzig Open Database Connectivity (ODBC) Idee: – API für eine DBMS, das ein Call-Level-Interface.
Oracle WebServer - Einführung. © Prof. T. Kudraß, HTWK Leipzig Oracle Web Application Server HTML WebServer ® File system Static HTML PL/SQL Packages.
Datenbank-Zugriffsschnittstellen am Beispiel von Oracle und PL/SQL.
Text-Retrieval mit Oracle Vortrag von Andreas Mück & David Diestel.
JDBC Konzepte Realisierung von Zugriffen
Übung Datenbanksysteme WS 2003/ Übung Datenbanksysteme Hierarchische DBMS
Transaction Script Software Component Technology for Distributed Applications.
Datenintegrität Referentielle Integrität create table
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
JDBC EDV JDBC.
Kapitel 9: Integritätssicherung
Datenbanken 10: Einfügen, Ändern, Löschen
Einführung MySQL mit PHP
3.5.2 Fremdschlüssel/ Referentielle Integrität (6/9)
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Cursor-Konzept u Zugriff auf Mengen von Ergebnistupeln u In SQLJ Iteratoren u Vergleichbar.
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Aufbau einer Verbindung zur Datenbank import java.net.URL; import java.sql.*; class JDBCExample.
JDBC: JAVA Database Connectivity
objekt-relationale Datenbanken
Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme
Datenbankentwicklung IV-LK
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
PHP und MYSQL am Organisatorisches Der komplette Kurs im Schnelldurchgang Bewertung von wichtig und unwichtig Historisch Kulturwissenschaftliche.
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4.
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #8 SQL (Teil 5)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #7 SQL (Teil 4)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #7 SQL (Teil 4)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL.
JDBC (Java DataBase Connectivity)
Datenbanksysteme für hörer anderer Fachrichtungen
Einführung in Datenbankmodellierung und SQL
Relationales Datenmodell und DDL
PL/SQL - Kurze Einführung April 2003Übung Data Warehousing: PL/SQL 2 PL/SQL.. ist eine Oracle-eigene, prozedurale Programmiersprache Sämtliche.
MODULA-2.
Datenbankanbindung mit
Structured Query Language
11 Verwaltung von Abhängigkeiten. Ziele Am Ende dieser Lektion verfügen Sie über die folgenden Kenntnisse: Überwachen prozeduraler Abhängigkeiten Effekte.
1 Referenzielle Konsistenz (1) Vorgehensweise: Klausel references mit nachfolgender Spezikation eines Attributs einer anderen Tabelle identifiziert ein.
Datenbanken im Web 1.
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #8 SQL (Teil 5)
SQL-Prozeduren Charakteristika: Kapselung von SQL-Anweisungen in Prozeduren, die wiederholt aufgerufen werden können. Dazu Verbergen parametrisierter SQL-
Trigger-abhängige Client Interaktionen (bezüglich Oracle8i)
JDBC1 Motivation(I) JDBC keine Abkürzung, sondern geschützter Name (inoffiziell: für Java Database Connectivity) unterschiedliche DBS haben unterschiedliche.
WS 2014/15 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 SQL Zusammenfassung.
Datenbanken erstellen mit PostgreSQL
SQL Structured Query Language Enzio Thiem. INHALT CREATE TABLE Anweisung Gängige Datentypen Beispiel CREATE TABLE Beispiel CREATE TABLE - erweitert Beispiel.
Das IT - Informationssystem
Sprachumfang von SQL Vier Kategorien DDL (Data Definition Language)
Übung Datenbanksysteme I Besprechung
JDBC Java DataBase Connectivity
Vorlesung #8 SQL (Teil 5).
Vorlesung Datenbankprogrammierung
Unterschiedliche Kontrollstrukturen
Datenbanken Von Amed und Alicia.
The Programming Language Pascal
 Präsentation transkript:

Übung Datenbanksysteme I Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock G-3.1.09, Campus III Hasso Plattner Institut

Motivation Grenzen von SQL Bedingte Anweisungen Erhöhe das Gehalt eines Arbeitsnehmers um 2%, falls er eine Belobigung erhalten hat Darstellung von Daten (z.B. Web-Anwendungen) Erstelle eine übersichtliche und schöne Repräsentation für eine Menge von Produkt-Tupeln Komplizierte Fragestellungen (z.B. Duplikaterkennung) Finde alle Kunden-Tupel, die sich sehr ähnlich sind String-Operationen (z.B. String-Splitting) Teile das Attribut Name auf in die Attribute Vor-, Mittel- und Nachname und weise den neuen Attributen anschließend passende Typen zu DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Motivation SQL und andere Programmiersprachen Embedded SQL Integriert SQL in andere Programmiersprachen: ADA, C, C++, Cobol, Fortran, M, Pascal, PL/I, … Bettet SQL beim Preprocessing in den Programmfluss ein Stored Procedures Speichern Prozeduren als DBMS Objekte in der Datenbank Können in SQL Ausdrücken aufgerufen werden Call-Level-Interface (CLI) Verbindet C mit DBMS Implementiert eine DBMS-spezifische Funktionsbibliothek Benötigt kein Preprocessing Java Database Connectivity (JDBC) Funktioniert wie CLI aber für Java DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Motivation Impedance Mismatch Bisher: Generische SQL Schnittstelle Absetzen einzelner, unverknüpfter SQL-Statements Verwendung über Kommandozeile oder DBMS-spezifischer GUIs Selten genutzt ( Datenbank-Administratoren) Allerdings: SQL ist prinzipiell Turing-vollständig! Jetzt: SQL in Programmiersprachen Einbettung in (große) Softwarekomponenten Verwendung aus dem Quellcode heraus Ausgiebig genutzt in allen möglichen Software-Projekten Impedance Mismatch DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Motivation Impedance Mismatch Impedance Mismatch = Verwendung unterschiedlicher Datenmodelle Relationales Model (DBMS) Primitive: Relationen und Attribute Kontrolle: Nebenbedingungen Modell: Deklarativ Generisches Modell (Programmiersprachen) Primitive: Pointer, verschachtelte Strukturen und Objekte Kontrolle: Schleifen und Verzweigungen Model: Imperativ (meistens) Datentransfer zwischen den Modellen notwendig! DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Motivation Impedance Mismatch Idee 1: Nutze SQL allein, allerdings … nicht alle Anweisungen ausdrückbar (z.B. nicht “n!“) Ausgabe beschränkt auf Relationen (z.B. keine Grafiken) Idee 2: Nutze Programmiersprache allein, allerdings … Anweisungen sind meist viel komplexer als SQL-Anfragen Abstraktion von Speicherstrukturen nicht möglich Verlust der physischen Datenunabhängigkeit! DBMS sind extrem effizient Idee 3: Nutze SQL eingebettet in einer Programmiersprache Programmiersprache (“Host Language“) für komplexe Operationen Embedded SQL für effizienten Datenzugriff Explizites Mapping der gelesenen und geschriebenen Daten DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Übersicht Einbettung von SQL DBSI - Übung Embedded SQL, Stored Procedures, JDBC Embedded SQL Stored Procedures OCL und JDBC Thorsten Papenbrock

Embedded SQL Übersetzung Programmiersprache & Embedded SQL DBMS-spezifisch, d.h. Kompiliervorgang muss für jedes DBMS (und möglicherweise auch für verschiedene Versionen desselben DBMS) erneut ausge- führt werden! Präprozessor Programmiersprache & Funktionsaufrufe DBSI - Übung Compiler Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock Ausführbares Programm

Embedded SQL Anfragen ohne Ergebnis Host-Variablen deklarieren EXEC SQL BEGIN DECLARE SECTION; char studioName[50], studioAdr[256]; char SQLSTATE[6]; EXEC SQL END DECLARE SECTION; Anfrage ohne Ergebnis EXEC SQL INSERT INTO Studio(Name, Adresse) VALUES (:studioName, :studioAdr); Verfahren für jeden SQL-Ausdruck, der kein Ergebnis liefert: INSERT, DELETE, UPDATE, CREATE, DROP, … Hostvariablen mit Doppelpunkt DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Embedded SQL Anfragen mit einem Ergebnis-Tupel Host-Variablen deklarieren EXEC SQL BEGIN DECLARE SECTION; char studioName[50], studioAdr[256]; char SQLSTATE[6]; EXEC SQL END DECLARE SECTION; Anfrage mit einem Ergebnis-Tupel EXEC SQL SELECT Name, Adresse INTO :studioName, :studioAdr FROM Studio WHERE id = 310; DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Embedded SQL Anfragen mit vielen Ergebnis-Tupeln Host-Variablen deklarieren EXEC SQL BEGIN DECLARE SECTION; char studioName[50], studioAdr[256]; char SQLSTATE[6]; EXEC SQL END DECLARE SECTION; Anfrage mit vielen Ergebnis-Tupeln DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Embedded SQL Anfragen mit vielen Ergebnis-Tupeln void printGehaltsBereiche() { } Stellen = 0: Anzahl Manager = 2 Stellen = 1: Anzahl Manager = 0 Stellen = 2: Anzahl Manager = 2 Stellen = 3: Anzahl Manager = 12 Stellen = 4: Anzahl Manager = 39 Stellen = 5: Anzahl Manager = 43 Stellen = 6: Anzahl Manager = 31 Stellen = 7: Anzahl Manager = 25 Stellen = 8: Anzahl Manager = 6 Stellen = 9: Anzahl Manager = 2 Stellen = 10: Anzahl Manager = 0 Stellen = 11: Anzahl Manager = 0 Stellen = 12: Anzahl Manager = 2 Stellen = 13: Anzahl Manager = 1 Stellen = 14: Anzahl Manager = 1 DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Embedded SQL Anfragen mit vielen Ergebnis-Tupeln void printGehaltsBereiche() { int i, stellen, counts[15]; EXEC SQL BEGIN DECLARE SECTION; int gehalt; char SQLSTATE[6]; EXEC SQL END DECLARE SECTION; EXEC SQL DECLARE managerCursor CURSOR FOR SELECT Gehalt FROM Manager; EXEC SQL OPEN managerCursor; for (i = 0; i < 15; i++) counts[i] = 0; while (1) { EXEC SQL FETCH FROM managerCursor INTO :gehalt; if (strcmp(SQLSTATE,“02000“)) break; stellen = 1; while ((gehalt /= 10) > 0) stellen++; if (stellen < 15) counts[stellen]++; } EXEC SQL CLOSE managerCursor; for (i = 0; i < 15; i++) printf(„Stellen = %d: Anzahl Manager = %d\n“, i, counts[i]); } Cursor deklarieren und öffnen Tupel abrufen und Cursor weitersetzen  NO DATA DBSI - Übung Embedded SQL, Stored Procedures, JDBC Cursor schließen Thorsten Papenbrock

Embedded SQL Anfragen mit vielen Ergebnis-Tupeln void printGehaltsBereiche() { int i, stellen, counts[15]; EXEC SQL BEGIN DECLARE SECTION; int gehalt; char SQLSTATE[6]; EXEC SQL END DECLARE SECTION; EXEC SQL DECLARE managerCursor CURSOR FOR SELECT Gehalt FROM Manager; EXEC SQL OPEN managerCursor; for (i = 0; i < 15; i++) counts[i] = 0; while (1) { EXEC SQL FETCH FROM managerCursor INTO :gehalt; if (strcmp(SQLSTATE,“02000“)) break; stellen = 1; while ((gehalt /= 10) > 0) stellen++; if (stellen < 15) counts[stellen]++; } EXEC SQL CLOSE managerCursor; for (i = 0; i < 15; i++) printf(„Stellen = %d: Anzahl Manager = %d\n“, i, counts[i]); } Cursor deklarieren und öffnen Tupel abrufen und Cursor weitersetzen  NO DATA DBSI - Übung Embedded SQL, Stored Procedures, JDBC Cursor schließen Thorsten Papenbrock

Übersicht Einbettung von SQL DBSI - Übung Embedded SQL, Stored Procedures, JDBC Embedded SQL Stored Procedures OCL und JDBC Thorsten Papenbrock

Stored Procedures Konzept und Umsetzung Persistant Stored Modules (PSM) „Gespeicherte Prozeduren“, engl. Stored Procedures Speichern Prozeduren als Datenbankelemente Mischen SQL und Programmiersprache Können in regulären SQL Ausdrücken verwendet werden CREATE PROCEDURE <Name>(<Parameter in/out>) <Lokale Variablendeklarationen> <Body der Prozedur>; CREATE FUNCTION <Name>(<Parameter in>) RETURNS <Typ> <Lokale Variablendeklarationen> DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Parameter in/out Lokale Variablen- deklarationen Body der Prozedur CREATE PROCEDURE MeanVar( IN studioName CHAR[15], OUT mittelwert REAL, OUT varianz REAL) DECLARE Not_Found CONDITION FOR SQLSTATE ‘02000’; DECLARE FilmCursor CURSOR FOR SELECT Laenge FROM Filme WHERE StudioName = studioName; DECLARE neueLaenge INTEGER; DECLARE filmAnzahl INTEGER; BEGIN SET mittelwert = 0.0; SET varianz = 0.0; SET filmAnzahl = 0; OPEN FilmCursor; FilmLoop: LOOP FETCH FilmCursor INTO neueLaenge; IF Not_Found THEN LEAVE FilmLoop END IF; SET filmAnzahl = filmAnzahl + 1; SET mittelwert = mittelwert + neueLaenge ; SET varianz = varianz + neueLaenge * neueLaenge; END LOOP; CLOSE FilmCursor; SET mittelwert = mittelwert / filmAnzahl; SET varianz = varianz / filmAnzahl - mittelwert * mittelwert; END; Parameter in/out Lokale Variablen- deklarationen Body der Prozedur DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Stored Procedures Externe Definition Stored Procedures können externen Code verwenden Code muss dazu in bestimmtem Verzeichnis liegen Beispiel: Datenbank: DB2 Externe Sprache: Java CREATE PROCEDURE PARTS_ON_HAND( IN PARTNUM INTEGER, OUT COST DECIMAL(7,2), OUT QUANTITY INTEGER) EXTERNAL NAME 'parts.onhand' LANGUAGE JAVA PARAMETER STYLE JAVA; DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Übersicht Einbettung von SQL DBSI - Übung Embedded SQL, Stored Procedures, JDBC Embedded SQL Stored Procedures OCL und JDBC Thorsten Papenbrock

OCL und JDBC Übersetzung Programmiersprache & Embedded SQL Präprozessor Programmiersprache & Funktionsaufrufe DBSI - Übung SQL-Bibliothek (Treiber) vom DBMS-Hersteller Compiler Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock Ausführbares Programm

OCL und JDBC Konzept DBMS-Spezifische Funktionsbibliotheken Ermöglichen … Programmieren in einer Programmiersprache (Wirtssprache) Einbettung von Datenbankanfragen in SQL Bieten spezielle Funktionen für den Datenbankzugriff Umgehen den Präprozessor Kompiliertes Ergebnis ist aber gleich! Call-Level-Interface (CLI) Verbindet C mit DBMS Adaptiert von ODBC (Open Database Connectivity) Java Database Connectivity (JDBC) Verbindet Java mit DBMS Nutzt Objektorientierung im Gegensatz zu CLI DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

DriverManager Connection Statement PreparedStatement ResultSet JDBC Überblick DriverManager getConnection() Connection createStatement() prepareStatement(Q) Statement PreparedStatement DBSI - Übung setString/set… executeQuery() executeQuery(Q) Embedded SQL, Stored Procedures, JDBC ResultSet ResultSet Thorsten Papenbrock

JDBC Erste Schritte DBMS-spezifischen Treiber einbinden JDBC-Bibliothek in den Classpath einbinden Verbindung zur Datenbank aufbauen String URL = "jdbc:db2://<server>:<port>/<db_name>"; String name = "<username>"; String pw = "<password>"; Connection con = DriverManager.getConnection(URL, name, pw); URL ist DBMS- und Datenbank-spezifisch URL-Pattern: "jdbc:subprotocol:datasource" DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

JDBC DBMS-URLs Vendor DBMS-URL DB2 jdbc:db2://{host}[:{port}]/{dbname} Derby jdbc:derby://server[:port]/databaseName[;URLAttributes=value[;...]] HSQLDB jdbc:hsqldb[:{dbname}][:hsql://{host}[/{port}]] MS SQL-Server jdbc:microsoft:sqlserver://{host}[:{port}][;DatabaseName={dbname}] MySQL jdbc:mysql://{host}[:{port}]/[{dbname}] Oracle jdbc:oracle:thin:@{host}:{port}:{dbname} PostgreSQL jdbc:postgresql://[{host}[:{port}]]/{dbname} DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Für häufige SQL-Anfragen JDBC Statements Statement Statement stmt = con.createStatement(); Prepared Statement PreparedStatement pstmt = con.prepareStatement(<Anfrage>); SQL Ausdrücke ausführen ResultSet rs = stmt.executeQuery(<Anfrage>); ResultSet rs = pstmt.executeQuery(); stmt.executeUpdate(UpdateAnfrage) pstmt.executeUpdate() Noch ohne SQL-Anfrage Für häufige SQL-Anfragen DBSI - Übung ResultSet als Rückgabewert Embedded SQL, Stored Procedures, JDBC Ohne Rückgabewert Thorsten Papenbrock

JDBC Beispiele Liste alle Manager-Gehälter: Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT Gehalt FROM Manager"); PreparedStatement pstmt = con.prepareStatement( "SELECT Gehalt FROM Manager"); ResultSet rs = pstmt.executeQuery(); Füge neues Schauspieler-Tupel ein: Statement stmt = con.createStatement(); stmt.executeUpdate("INSERT INTO spielt_in VALUES(" + "'Star Wars', 1979, 'Harrison Ford'"); PreparedStatement managerStmt = con.prepareStatement( "INSERT INTO spielt_in VALUES(" + "'Star Wars', 1979, 'Harrison Ford'"); pstmt.executeUpdate(); DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

JDBC ResultSet: Cursor Methoden des ResultSet next() liefert nächstes Tupel liefert FALSE, falls kein weiteres Tupel vorhanden getString(i) Liefert Wert des i-ten Attributs des aktuellen Tupels getInt(i), getFloat(i) usw. Alternativ: getString("<AttributName>") Anwendungsbeispiel: while(gehaelter.next()){ gehalt = gehaelter.getInt(1); // Operationen auf gehalt } Java DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

JDBC Paramater Definition mittels PreparedStatement Fragezeichen als Platzhalter für Parameter Bindung mittels setString(i, v), setInt(i, v) usw. Beispiel: Einfügen eines neuen Studios String studioName = "Pixar Animation Studios"; String studioAdr = "Emeryville, Vereinigte Staaten"; PreparedStatement studioStmt = con.prepareStatement( "INSERT INTO Studio(Name, Adresse) VALUES(?, ?)"); studioStmt.setString(1, studioName); studioStmt.setString(2, studioAdr); studioStmt.executeUpdate(); DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

JDBC-Bibliothek einbinden JDBC Zusammenfassung JDBC-Bibliothek einbinden DBMS-JAR in den Classpath aufnehmen Verbindung zur Datenbank aufbauen Connection über DriverManager herstellen SQL-Anfragen ausführen Statements oder PreparedStatements nutzen Ergebnis der SQL-Anfragen abfragen ResultSet auswerten DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Exkurs 1 Foreign Keys Schema: Lieferant (LieferantID, LieferantName, Adresse) Produkt (ProduktID, ProduktName, Einkaufspreis, LieferantID) „Wir erlauben nur Produkte in unserer Datenbank, zu denen auch ein Lieferant existiert, und sollte ein Lieferant aussteigen, wollen wir auch dessen Produkte löschen.” Wie muss der geforderte Foreign Key definiert werden? ALTER TABLE Produkt ADD CONSTRAINT ProduktFremdschlüssel FOREIGN KEY (LieferantID) REFERENCES Lieferant (LieferantID) ON DELETE CASCADE; DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Exkurs 2 Trigger Schema: Lieferant (LieferantID, LieferantName, Adresse) Produkt (ProduktID, ProduktName, Einkaufspreis, LieferantID) „Sobald das letzte Produkt eines Lieferanten gelöscht wird, dann soll auch der entsprechende Lieferant gelöscht werden.” Wie muss der entsprechende Trigger definiert werden? CREATE TRIGGER LöscheLieferant AFTER DELETE ON Produkt REFERENCING OLD AS gelöschtesProdukt FOR EACH ROW WHEN (0 = (SELECT COUNT(*) FROM Produkt WHERE LieferantID = gelöschtesProdukt.LieferantID)) DELETE FROM Lieferant WHERE LieferantID = gelöschtesProdukt.LieferantID; DBSI - Übung Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock

Übung Datenbanksysteme I Embedded SQL, Stored Procedures, JDBC Thorsten Papenbrock G-3.1.09, Campus III Hasso Plattner Institut