ss 2004 datenbanken 4w mi 13:30 – 15:00 g 2.30 vorlesung #9 sql (teil 4)

29
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

Upload: gamhard-dreesen

Post on 06-Apr-2015

107 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Vorlesung #9

SQL (Teil 4)

Page 2: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 2

SS 2004Datenbanken 4WMi 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

Page 3: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 3

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Einschub: Oracle „In Line“ CONSTRAINT- Syntax

REFERENCESREFERENCES [schema .] { object_table | view } [ (column [, column]...) ] [schema .] { object_table | view } [ (column [, column]...) ] [[ON DELETEON DELETE { { CASCADECASCADE | | SET NULLSET NULL }] [constraint_state] }] [constraint_state]

[[CONSTRAINTCONSTRAINT constraint_name] constraint_name] { [{ [NOTNOT] ] NULLNULL | | UNIQUEUNIQUE | | PRIMARY KEYPRIMARY KEY | references_clause | | references_clause | CHECKCHECK ( condition ) } [constraint_state] ( condition ) } [constraint_state]

Page 4: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 4

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

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

Page 5: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 5

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30Trigger in Oracle Syntax

create or replace trigger keineDegradierungbefore update on Professorenfor each rowwhen (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;

Page 6: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 6

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30Trigger 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 abfangenVereinfacht – nur DML Events, man kann auch DDL abfangen

Page 7: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 7

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30Trigger in DB2 Syntax

Page 8: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 8

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

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

Page 9: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 9

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30Oracle PL/SQL Prozedurale Erweiterung von SQL Beispiel: Funktion Summe - rekursiv

CREATE FUNCTION Summe1 (n INTEGER)RETURN INTEGERISBEGIN

IF n = 0 THEN return 0;

ELSIF n = 1 THEN return 1; ELSIF n > 1 THEN return n + Summe1(n - 1);

END IF;END;

Page 10: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 10

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30Oracle PL/SQL (2) nicht rekursiv

FUNCTION Summe2(n INTEGER)RETURN INTEGERISresult 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 INTEGERISBEGIN RETURN (n*(n+1))/2;END;

Page 11: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 11

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Page 12: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 12

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30Oracle 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?

Page 13: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 13

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30Deklarativ vs. Prozedural (2)

Page 14: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 14

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30Deklarativ vs. Prozedural (3)

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

Page 15: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 15

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30Cursor Beispiel (3)

CURSOR c_orte is select PLZ, Land from orteorder by PLZ ASC; lv_c_orte c_orte%ROWTYPE;BEGIN

FOR lv_c_orte IN c_orteLOOP... – Anweisungen, IT THEN ELSE usw. ...END LOOP;

END;

Page 16: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 16

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Page 17: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 17

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Einbettung in Wirtssprachen „Embedded SQL“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);

Page 18: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 18

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

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);

Page 19: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 19

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Einbettung in Wirtssprachen „Embedded SQL“ (3)error:

exec sql whenever sqlerror continue;exec sql rollback work release;printf("fehler aufgetreten!\n");exit(-1);}

Page 20: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 20

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30Datenbankanbindungen

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

Page 21: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 21

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Page 22: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 22

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Page 23: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 23

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Page 24: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 24

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Page 25: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 25

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Page 26: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 26

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

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?

Page 27: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 27

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

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

Page 28: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

© Bojan Milijaš, 12.05.2004 Vorlesung #9 - SQL (Teil 4) 28

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30Ausblick Vorlesung #10 und #11

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

Page 29: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Vorlesung #9

Ende