Vorlesung 8 - SQL (Teil 5)

Werbung
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
Vorlesung #8
SQL (Teil 5)
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
„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
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
2
Dynamische
Integritätsbedingungen
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
 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
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
3
Trigger in Oracle Syntax
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
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;
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
4
Trigger in Oracle Syntax (2)
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
Vereinfacht – nur DML Events, man kann auch DDL abfangen
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 }
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
5
Trigger in DB2 Syntax
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
6
WS 2015/16
Prozedurale Erweiterung von
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
SQL – Oracle PL/SQL
 Trigger waren bzw. sind bereits prozedural!
 Prozedurale Erweiterung ist notwendig
 Aus theoretischer Sicht – um TouringVollstä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
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
7
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
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;
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
8
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
Oracle PL/SQL (2)
 nicht rekursiv
 nicht rekursiv, schlau
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;
FUNCTION Summe3(n INTEGER)
RETURN INTEGER
IS
BEGIN
RETURN (n*(n+1))/2;
END;
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
9
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
10
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
11
Einbettung in Wirtssprachen
„Embedded SQL“
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
Mit Hilfe eines Präcompilers!!!
#include <stdio.h>
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);
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
12
Einbettung in Wirtssprachen
„Embedded SQL“ (2)
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
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);
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
13
Einbettung in Wirtssprachen
„Embedded SQL“ (3)
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
error:
exec sql whenever sqlerror continue;
exec sql rollback work release;
printf("fehler aufgetreten!\n");
exit(-1);
}
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
14
Datenbankanbindungen
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
 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
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
15
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
16
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
17
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
18
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
19
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
20
Abgrenzung: Datenbanken vs.
Anwendungen
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
 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?
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
21
Wohin mir der Logik?
Datenbank oder Anwendung
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
 Man entscheidet sich für die Datenbank
 Wenn man aus Performance-, Skalierbarkeit-, Sicherheitsoder 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 SQLDatenablage betrachtet
 Wenn eine Datenbankzentralisierung aus finanziellen oder
technischen Gründen keinen Sinn macht
© Bojan Milijaš, 20.11.2015
Vorlesung #8 - SQL (Teil 5)
22
WS 2015/16
Datenbanksysteme
Fr 17:00 – 18:30
R 1.008
Vorlesung #8
Ende
Herunterladen