Vorlesung9

Werbung
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
Vorlesung #9
SQL (Teil 4)
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
„Fahrplan“
 Besprechung der Übungsaufgaben
 Einschub: CONSTRAINT Syntax
 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
 ODBC – Java Database Connectivity
 SQLJ – Einbettung von SQL in Java
 QBE – Query by Example
 Datenbankanwendungen und Paradigmen
 Fazit und Ausblick Vorlesung #10
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
2
Einschub: Oracle „In Line“
CONSTRAINT- Syntax
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
[CONSTRAINT constraint_name]
{ [NOT] NULL | UNIQUE | PRIMARY KEY | references_clause |
CHECK ( condition ) } [constraint_state]
REFERENCES [schema .] { object_table | view } [ (column [, column]...) ]
[ON DELETE { CASCADE | SET NULL }] [constraint_state]
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
3
Dynamische
Integritätsbedingungen
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
 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š, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
4
Trigger in Oracle Syntax
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
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š, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
5
Trigger in Oracle Syntax (2)
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
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š, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
6
Trigger in DB2 Syntax
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
7
SS 2004
Prozedurale Erweiterung von
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
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š, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
8
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
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š, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
9
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
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š, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
10
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
11
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
Oracle PL/SQL
 Beispiel: man verfügt über eine Tabelle (oder
eine View über zwei Tabellen), die zu jedem
Ort die zugehörige PLZ und das Bundesland
beinhaltet
 Man möchte für jedes Bundesland PLZ
Intervale bestimmen
 In SQL sehr umständlich, mit vielen „unsauberen“
Hilfskonstrukten
 Wie bringt aber man aber Daten aus einer
Tabelle in eine prozedurale Sprache hinein?
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
12
Deklarativ vs. Prozedural (2)
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
13
Deklarativ vs. Prozedural (3)
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
 PLZ Interval für jedes Bundesland
 Idee
 Sortiere nach PLZ
 Merke das Bundesland für die kleinste PLZ
 Bei jeder weiteren PLZ überprüfe ob sich das Bundesland
geändert hat, d.h. vergleich das aktuelle Bundesland mit
dem Bundesland des vorherigen Laufes
 Wenn ja, dokumentiere die Änderung
 Wiederhole bis zur größten PLZ
 Cursor-FOR oder Cursor-WHILE Schleife 
vorgestellt in der Vorlesung
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
14
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
Cursor Beispiel (3)
CURSOR c_orte is
select PLZ, Land
from orte
order by PLZ ASC;
lv_c_orte c_orte%ROWTYPE;
BEGIN
FOR lv_c_orte IN c_orte
LOOP
... – Anweisungen, IT THEN ELSE usw. ...
END LOOP;
END;
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
15
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
16
Einbettung in Wirtssprachen
„Embedded SQL“
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
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š, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
17
Einbettung in Wirtssprachen
„Embedded SQL“ (2)
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
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š, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
18
Einbettung in Wirtssprachen
„Embedded SQL“ (3)
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
error:
exec sql whenever sqlerror continue;
exec sql rollback work release;
printf("fehler aufgetreten!\n");
exit(-1);
}
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
19
Datenbankanbindungen
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
 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š, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
20
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
21
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
22
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
23
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
24
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
25
Abgrenzung: Datenbanken vs.
Anwendungen
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
 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š, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
26
Wohin mir der Logik?
Datenbank oder Anwendung
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
 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š, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
27
Ausblick Vorlesung #10 und #11
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
 Vorlesung #10






Relationale Theorie
Funktionale Abhängigkeiten
Schlüssel-Begriff
Bestimmung von funktionalen Abhängigkeiten
„Schlechte“ Relationenschemata
Zerlegung von Relationen
 Vorlesung #11
 Normalformen (1., 2., 3., 4., BCNF)
 Mehrwertige Abhängigkeiten
© Bojan Milijaš, 12.05.2004
Vorlesung #9 - SQL (Teil 4)
28
SS 2004
Datenbanken 4W
Mi 13:30 – 15:00
G 2.30
Vorlesung #9
Ende
Herunterladen