Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Vorlesung #8 SQL (Teil 5)

Ähnliche Präsentationen


Präsentation zum Thema: "WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Vorlesung #8 SQL (Teil 5)"—  Präsentation transkript:

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


Herunterladen ppt "WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Vorlesung #8 SQL (Teil 5)"

Ähnliche Präsentationen


Google-Anzeigen