Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Otthild Gegenheimer Geändert vor über 10 Jahren
1
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Vorlesung #8 SQL (Teil 5)
2
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013 „Fahrplan“ Einschub: „Self Joins“ (relevant fürs Praktikum) Dynamische Intergritätsbedingungen, das „Trigger“- Konzept von Oracle Prozedurale Erweiterungen, Beispiel Oracle PL/SQL Einbettung von SQL in Wirtssprachen, C, C++ ODBC – Open Database Connectivity JDBC – Java Database Connectivity SQLJ – Einbettung von SQL in Java QBE – Query by Example Datenbankanwendungen und Paradigmen Fazit und Ausblick Vorlesung #9 Vorlesung #8 - SQL (Teil 5)
3
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013 Dynamische Integritätsbedingungen Bedingungen an Zustandsänderungen bzw. Datenänderungen werden mittels Trigger überprüft. Man kann mit Triggern auch nachträgliche bzw. zusätzliche Berechnungen durchführen. CREATE TRIGGER – eigenständiger Datenbankobjekt der einer Tabelle zugeordnet wird, d.h. auf eine Tabelle „aufpasst“ Auslöser wird definiert (before update, for each row) Bedingungen gefolgt von Anweisungen Vorlesung #8 - SQL (Teil 5)
4
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013 Trigger in Oracle Syntax create or replace trigger keineDegradierung before update on Professoren for each row when (old.Rang is not null) begin if :old.Rang = 'C3' and :new.Rang = 'C2' then :new.Rang := 'C3'; end if; if :old.Rang = 'C4' then :new.Rang := 'C4'; end if; if :new.Rang is null then :new.Rang := :old.Rang; end if; end; Vorlesung #8 - SQL (Teil 5)
5
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013 Trigger in Oracle Syntax (2) CREATE [OR REPLACE] TRIGGER [schema.] trigger { BEFORE | AFTER | INSTEAD OF } { DELETE | INSERT | UPDATE [OF column [, column]...] } [FOR EACH ROW] [WHEN ( condition ) ] { pl/sql_block | call_procedure_statement } Vereinfacht – nur DML Events, man kann auch DDL abfangen Vorlesung #8 - SQL (Teil 5)
6
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013 Trigger in DB2 Syntax Vorlesung #8 - SQL (Teil 5)
7
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013 Prozedurale Erweiterung von SQL – Oracle PL/SQL Trigger waren bzw. sind bereits prozedural! Prozedurale Erweiterung ist notwendig Aus theoretischer Sicht – um Touring- Vollständigkeit zu erreichen Aus praktischer Sicht - um Probleme des Alltags, viel einfacher prozedural statt deklarativ zu lösen Hauptbegriff: Datenbank Cursor Dynamisches SQL in PL/SQL – würde hier den Rahmen sprengen Vorlesung #8 - SQL (Teil 5)
8
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013 Oracle PL/SQL Prozedurale Erweiterung von SQL Beispiel: Funktion Summe - rekursiv CREATE FUNCTION Summe1 (n INTEGER) RETURN INTEGER IS BEGIN IF n = 0 THEN return 0; ELSIF n = 1 THEN return 1; ELSIF n > 1 THEN return n + Summe1(n - 1); END IF; END; Vorlesung #8 - SQL (Teil 5)
9
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013 Oracle PL/SQL (2) nicht rekursiv FUNCTION Summe2(n INTEGER) RETURN INTEGER IS result INTEGER DEFAULT 0; v_n INTEGER DEFAULT n; BEGIN WHILE v_n >= 0 LOOP result := result + v_n; v_n := v_n - 1; END LOOP; return result; END; nicht rekursiv, schlau FUNCTION Summe3(n INTEGER) RETURN INTEGER IS BEGIN RETURN (n*(n+1))/2; END; Vorlesung #8 - SQL (Teil 5)
10
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013Vorlesung #8 - SQL (Teil 5)
11
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013Vorlesung #8 - SQL (Teil 5)
12
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013 Einbettung in Wirtssprachen „Embedded SQL“ Mit Hilfe eines Präcompilers!!! #include exec sql begin declare section; varchar user_passwd[30]; int exMatrNr; exec sql end declare section; exec sql include SQLCA; main() { printf("Name/Password:"); scanf("%", user_passwd.arr); Vorlesung #8 - SQL (Teil 5)
13
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013 Einbettung in Wirtssprachen „Embedded SQL“ (2) user_passwd.len=strlen(user_passwd.arr); exec sql wheneversqlerror goto error; exec sql connect :user_passwd; while (1) { printf("Matrikelnummer (0 zum beenden):"); scanf("%d", &ecMatrNr); if (!exMatrNr) break; exec sql delete from Studenten where MatrNr= :exMatrNr; } exec sql commit work release; exit(0); Vorlesung #8 - SQL (Teil 5)
14
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013 Einbettung in Wirtssprachen „Embedded SQL“ (3) error: exec sql whenever sqlerror continue; exec sql rollback work release; printf("fehler aufgetreten!\n"); exit(-1); } Vorlesung #8 - SQL (Teil 5)
15
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013 Datenbankanbindungen ODBC (Open Database Connecticity) Anbindung von Windows-Programmen Beispiel –Excel Zugriff auf Oracle JDBC (Java Database Connectivity) Eigentlich ein CLI Call-Level Interface SQLJ Echte Einbettung von SQL in Java, wie C, C++ Wichtig bei allen Schnittstellen: immer an die Voreinstellungen denken was passiert bei einem Fehler gibt es automatisch einen COMMIT oder ROLLBACK Vorlesung #8 - SQL (Teil 5)
16
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013Vorlesung #8 - SQL (Teil 5)
17
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013Vorlesung #8 - SQL (Teil 5)
18
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013Vorlesung #8 - SQL (Teil 5)
19
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013Vorlesung #8 - SQL (Teil 5)
20
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013Vorlesung #8 - SQL (Teil 5)
21
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013 Abgrenzung: Datenbanken vs. Anwendungen Marktbeherrschende Datenbanken beinhalten heute bereits Eingebaute und erweiterbare SQL Funktionen und Prozeduren als prozedurale Erweiterung XML und Java Standardschnittstellen zu jeder wichtigen Programmiersprache (Fortran, Cobol, C, C++) Eingebaute Funktionen für Volltextsuche, Geodaten, OLAP, Data Mining, Web usw. Objekte, benutzerdefinierte Datentypen Wo ist die Grenze zwischen einer Datenbank und einer „klassischen“ Anwendung? Vorlesung #8 - SQL (Teil 5)
22
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 21.11.2013 Wohin mir der Logik? Datenbank oder Anwendung Man entscheidet sich für die Datenbank Wenn man aus Performance-, Skalierbarkeit-, Sicherheits- oder Verfügbarkeitsgründen eine (bestimmte) Datenbank wählen muss Wenn man mit mehreren verschiedenen Anwendung gleichzeitig auf die Daten zugreifen möchte, so dass die Anwendungen „nur visualisieren“ und die Datenbank die Zugriffe und die Datenverarbeitung regelt Man entscheidet sich für die Anwendung Wenn man Datenbank-unabhängig bleiben möchte, d.h. die zugrundeliegende(n) Datenbank(en) lediglich als SQL- Datenablage betrachtet Wenn eine Datenbankzentralisierung aus finanziellen oder technischen Gründen keinen Sinn macht Vorlesung #8 - SQL (Teil 5)
23
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Vorlesung #8 Ende
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.