0
`
Informationssysteme
Informationssysteme
Abstract: Ein Informationssystem ist ein soziotechnisches System, das die Abarbeitung von Informationsnachfrage zur
Aufgabe hat. Es handelt sich um ein Mensch/Aufgabe/Technik-System, das Daten produziert, beschafft, ver-
teilt und verarbeitet.
Daneben bezeichnen Informationssysteme im allgemeineren Sinne Systeme von Informationen, die in einem
wechselseitigen Zusammenhang stehen.
Die Begriffe Informationssystem und Anwendungssystem werden häufig synonym verwendet. Dabei werden
Informationssysteme im engeren Sinne als computergestützte Anwendungssysteme verstanden. Es ist jedoch
wichtig zu verstehen, dass ein Anwendungssystem mit Anwendungssoftware und Datenbank nur Teil eines
Informationssystems sind.
MSC: paul.panhofer@gmail.com
Keywords:
1
Informationssysteme
2
© Dipl.Ing.-Paul Panhofer Bsc.
3
Informationssysteme
4
© Dipl.Ing.-Paul Panhofer Bsc.
5
Informationssysteme
6
© Dipl.Ing.-Paul Panhofer Bsc.
7
Informationssysteme
Glossar 259
Index 260
8
Informationssysteme - Theorieskriptum
.
L |
1.1.1 Phasen der Datenbankentwicklung
L Externe Phase
Informationsbeschaffung: In der externen
Phase wird die Informationsstruktur des Da-
tenmodells entworfen.
n Konzeptionelle Phase
Semantische Modell: Ziel des konzeptionellen
Entwurfs ist die formalisierte Beschreibung des
betrachteten Sachverhalts.
Logische Phase:
Logische Datenmodell: Ziel ist die Übertra-
gung des semantischen Datenmodells in ein
logisches Datenmodell.
Physische Phase:
Datenbankschema: Aus dem logischen Modell
wird die konkrete Datenbank generiert.
10
© Dipl.Ing.-Paul Panhofer Bsc.
1.1.2 Externe Phase - Informationsbeschaffung Das Ergebnis der externen Phase ist eine informelle
Beschreibung des Fachproblems in Form eines Doku-
ments.
In der externen Phase wird die Informationsstruktur
des Datenmodells geplant.
Erklärung: Vorgangsweise
Ziel der externen Phase ist die Informationsbe- ‚ Als erstes erfolgt eine Strukturierung der Anforde-
schaffung. Die Anforderungen des Kunden werden rungen in Datensätze.
gesammelt und verarbeitet. ‚ Am Ende dieses Schrittes ist die abzubildende Welt
auf eine Menge von Entitäten abgebildet.
11
Informationssysteme
Das Ergebnis der konzeptionellen Phase ist die Be- 1.2. Entity Relationship Modell
schreibung des Fachproblems in Form des Entity Re-
lationship Modells.
L Modell
q
Ein Modell beschreibt ein Abbild der Wirklich-
keit.
‚ Das Ergebnis der physischen Phase ist eine Folge Beziehungen beschreiben Relationen zwi-
von Datenbankbefehlen die zum Anlgegen der phy- schen Entitäten.
sischen Datenstruktur in der Datenbank verwendet
z.B: Ein Schüler (Alexander Kauper) leiht ein
werden.
Buch (Die Leiden des jungen Herwig) aus.
q
12
© Dipl.Ing.-Paul Panhofer Bsc.
1.2.2 Datenaggregation
ü Attribute
Datenaggregation beschreibt den Prozess des Zu-
Attribute beschreiben Eigenschaften von Enti-
sammentragens von Daten aus mehreren Tabellen.
täten oder Beziehungen.
1
Wir möchten beispielsweise wissen welche Prüfungen
ein bestimmter Student abgelegt hat.
13
Informationssysteme
Erklärung: Entität
‚ In der Datenmodellierung ist eine Entität ein kon-
kretes Objekt bzw. ein konkreter Sachverhalt.
q
‚ Eine Entität unterscheidet sich über ein Schlüsse-
lattribut von anderen Entitäten desselben Typs.
1.2.5 Vererbung
‚ Der Entitättyp beschreibt die Ausprägung eines Ob-
jekts durch die Angabe von Attributen.
L Vererbung
q Vererbung definiert eine Beziehung zwischen
Entitäten. Die Beziehung beschreibt dabei ei-
ne ist ein Beziehung.
1.2.6 Kardinalität
14
© Dipl.Ing.-Paul Panhofer Bsc.
15
Informationssysteme
‚ Dabei liegt es in der Entscheidung des DB Admins ‚ Im Gegensatz zur 1:1 Relation muß das Fremd-
in welche der beiden Tabellen das Fremdschlüsselfeld schlüsselfeld in die Tabelle eingetragen werden, die
eingetragen wird. der Many Seite der Relation entspricht.
‚ 1:1 Relationen aus Entity Relaship Modellen werden ‚ Sind mit der 1:n Relation zusätzliche Felder assoziert
mit Fremdschlüsselspalten im Relationalen Mo- so werden sie in derselben Tabelle eingetragen wie
dell aufgelöst. das Fremdschlüsselfeld.
16
© Dipl.Ing.-Paul Panhofer Bsc.
L |
Transformation: n:m Relation Erklärung: Vererbung
‚ n:m Relationen werden eingesetzt um komplexe Re- ‚ Die Vererbung dient dazu, aufbauend auf existie-
lationen im relationalen Model abzubilden. renden Entitäten neue Entitäten zu definieren, wo-
z.B.: Eine Klasse wird von mehreren Lehrern unter- bei die Beziehung zwischen ursprünglicher und neuer
richtet. Ein Lehrer unterrichtet mehrere Klassen. Entität dauerhaft ist.
‚ Im Relationalen Modell wird eine n:m Relation in ‚ Wird bezeichnen dabei die Entität von der geerbt
Form von 2 1:n Relationen dargestellt. wird als Basis- bzw. Vaterentität. Die erbende En-
tität wird als Kindentität bezeichnet.
‚ Für die 1:n Relationen wird im Modell eine eigene
Tabelle hinzugefügt. ‚ Die Kindentität stellt dabei eine Erweiterung der
ursprünglichen Entität dar.
‚ Tabellen zum Auflösen von n:m Relationen werden
als Joined Tables bezeichnet. Das relationale Modell unterstützt Vererbung als
Die Joined Table beinhaltet dabei die Fremdschlüs- Konzept nicht.
selfelder beider 1:n Relationen.
Transformation: Vererbung
‚ Besitzt die n:m Relation jedweilige Attribute wer-
den diese ebenfalls in die Joined Table als Felder ‚ Bei der Abbildung des ER Modells in das Relationa-
eingetragen. le Modell müssen edwaige Vererbungsbeziehungen
im ER Modell neu modelliert werden.
‚ Für die Namensgebung von Joined Tables hat
es sich bewährt die Namen der Tablellen, getrennt ‚ Zur Auflösung einer Vererbungsbeziehung kommt
durch einen Unterstirch zu verwenden die die Rela- eine der beiden folgenden Strategien zum Einsatz:
tion definieren. Single Table bzw. Joined Table Strategie.
q
Erklärung: Single Table Strategie
‚ Instanzen von Entitäten die zueinander in einer Ver-
erbungsbeziehung stehen werden alle in einer ein-
zelnen Tabelle gespeichert.
‚ Die Felder der Tabelle entsprechen den Attributen
aller in Relation stehenden Entitäten.
‚ Zusätzlich wird ein sogennantes Diskriminatorfeld
in die Tabelle eingetragen.
‚ Mit dem Diskriminator wird differenziert welcher
Datensatz ursprünglich welcher Entität zugeordnet
war.
17
Informationssysteme
‚ Anschließend werden die verbeleibenden Daten aus ‚ Die Namen von Entitäten sollten stets im Plural
der Schüler Tabelle ausgelesen. formuliert sein.
‚ Der Trick dabei ist das sowohl in der Person- als ‚ Die Namen von Feldern solle im Singular formuliert
auch in der Schüler Tabelle der selbe Wert für den sein.
Schlüssel eingetragen ist.
‚ Verwenden Sie für Schlüssel stets das Postfix ID.
q
q
18
© Dipl.Ing.-Paul Panhofer Bsc.
. .
19
Informationssysteme
. .
20
Informationssysteme - Theorieskriptum
.
Oracle SQL
October 6, 2019
Informationssysteme
22
© Dipl.Ing.-Paul Panhofer Bsc.
‚ Data Manipulation Language: Befehle zum Ver- 2.1.3 DQL - Select Anweisung
arbeiten von Daten.
Die select Anweisung wird verwendet um Daten aus
‚ Data Definition Language: Befehle zum Definieren einer relationalen Datenbank zu lesen.
der Struktur einer Datenbank.
2
Beschreibung der Struktur der Daten in der Daten- Die where Klausel ist optional.
bank
23
Informationssysteme
( Order By Klausel - Sortierung ‚ Hier steht gewissermassen der Satz: Wähle alle Spal-
ten der Tabelle employees und zeige die Daten als
Mit der order By Klausel wird eine Sortie- Ergebnis an.
rung der Datensätze des Abfrageergebnisses
durchgeführt. ‚ Am Ende der select Anweisung steht ein Semikolon.
Das Semikolon ist dabei nicht Teil der select Anwei-
Die order by Klausel ist optional. sung, sondern ein Steuerzeichen der Datenbank.
24
© Dipl.Ing.-Paul Panhofer Bsc.
In der select Klausel kann die Angabe von Spaltenbe- Zur Bearbeitung alphanumerischer Werte stellt SQL
zeichnern in beliebiger Reihenfolge bzw. in beliebiger den || Operator zur Verfügung.
Zahl erfolgen.
Erklärung: Spaltenwerte verknüpfen
Erklärung: Wiederholte Spaltenausgabe ‚ SQL verwendet den || Operator um alphanumeri-
‚ In der select Klausel können dieselben Spaltenbe- sche Werte miteinander zuverknüpfen.
zeichner mehrfach angegeben werden.
‚ Der || Operator kann dabei beliebig oft in einem
‚ Die Ausgabe der Daten erfolgt dabei entsprechend, SQL Ausdruck auftreten.
der in der Klausel definierten Reihenfolge der Spal-
tenbezeichner. Query: Spaltenwerte verknüpfen
1 -- ----------------------------------------
Query: Wiederholte Spaltenausgabe
2 -- Alphanumerische Werte verknuepfen
1 -- ---------------------------------------- 3 -- ----------------------------------------
2 -- Wiederholte Spaltenausgabe 4 SELECT last_name || ’ ’
3 -- ---------------------------------------- 5 || first_name
4 SELECT last_name, first_name, department_id, 6 FROM employees;
5 salary,
6 salary
q
7 FROM employees;
8
q Erklärung: Spaltenalias
‚ Ein Spaltenalias wird durch ein Leerzeichen ge-
2.2.3 Spaltenwerte bearbeiten trennt, hinter der Spaltenbezeichnung bzw. dem
Ausdruck angegeben, deren Bezeichnung maskiert
Daten können vor ihrer Ausgabe durch die select Klau- werden soll.
sel algebraisch bearbeitet werden.
‚ Klauseln die von der SQL Engine nach der select
Query: Spaltenwerten algebraisch bearbeiten Klausel ausgewertet werden, besitzen eine Referenz
1 -- ---------------------------------------- auf Spaltenaliase.
2 -- Mit Spaltenwerten rechnen ‚ Enthält ein Spaltenalias Sonderzeichen, muß es un-
3 -- ---------------------------------------- ter Hochkomma gesetzt werden.
4 SELECT employee_id, last_name, first_name,
5 salary * 1.03,
Query: Spaltenaliase definieren
6 salary * 1.10,
1 -- ----------------------------------------
7 salary - (salary * 0.8)
2 -- Spaltenaliase definieren
8 FROM employees;
3 -- ----------------------------------------
4 SELECT last_name nachname, job_id beruf
Analyse: Spaltenwerte bearbeiten 5 FROM employees;
‚ Durch die Anweisung wird zusätzlich zum Gehalt 6
q q
25
Informationssysteme
Als Pseudospalten wird in SQL eine spezifische Form Eine Sequenz ist wie eine Tabelle ein Datenbankobjekt.
von Spalten bezeichnet. Mit einer Sequenz können numerische Werte für SQL
Abfragen generiert werden.
q
q
26
© Dipl.Ing.-Paul Panhofer Bsc.
ROWNUM Jedem Ergebnisdatensatz einer SQL Abfrage wird eine SELECT * FROM employees WHERE ROWNUM < 10
Numer entsprechend seiner Position im Ergebnis der Ab-
frage zugeordnet.
SYSDATE Die Pseudospalten SYSDATE Funktion ermöglicht den Zu- SELECT SYSDATE FROM DUAL
griff auf die interne Zeit des Datenbankservers.
TIMESTAMP Die Pseudospalten TIMESTAMP Funktion ermöglicht den SELECT TIMESTAMP FROM DUAL
Zugriff auf die interne Zeit des Datenbankservers.
USER Die USER Pseudospalte ermöglicht den Zugriff auf den SELECT USER, UID FROM DUAL
Namen des eingeloggten Benutzers der gegenwärti-
gen Datenbanksession.
UID Die UID Pseudospalte ermöglicht den Zugriff auf die SELECT USER, UID FROM DUAL
ID des eingeloggten Benutzers der gegenwärtigen
Datenbansession.
CURRVAL Die CURRVAL Pseudospalte liefert den aktuellen Wert der SELECT employee_seq.CURRVAL FROM DUAL
Sequenz. Der Werte entspricht dabei dem Wert, der
beim letzten Aufruf von SEQUENCE_NAME.NEXTVAL gene-
riert worden ist.
NEXTVAL Die NEXTVAL Pseudospalte liefert den nächsten Wert der SELECT employee_seq.NEXTVAL FROM DUAL
Sequenz.
Abbildung 6. Pseudospalten
Die USER bzw. UID Pseudospalten ermöglichen den Zu- Die SYSDATE bzw. TIMESTAMP Pseudospalte ermöglicht
griff auf die Daten des eingeloggten Users. den Zugriff auf die interne Zeit des Datenbankservers.
q q
27
Informationssysteme
SQL als deklarative Programmiersprache unter- Die case Klausel zeigt im Vergleich zu anderen Klau-
stützt keine Konstrukte zur Steuerung des Program- seln mehr das Verhalten eines Operators als einer
mablaufs3 . Klausel.
Mit der case Klausel definiert die SQL Spezifikation Die case Klausel kann dabei nur im Kontext einer
jedoch einen Bedingungsoperator, der das Ergeb- anderen Klausel ausgewertet werden.
nis einer Abfrage in konditionale Abhängigkeit zum
Query: Case Klausel
Datenbestand setzt.
1 -- ----------------------------------------
2 -- Fallbeispiele : CASE in ORDER BY
2.3.1 Case Klausel 3 -- ----------------------------------------
4 SELECT country_id, first_name, last_name
5 FROM employees
L Case Klausel - Kondition
6 ORDER BY
Die case Klausel ermöglicht eine konditiona- 7 CASE
le Verarbeitung des Datenbestands einer SQL 8 WHEN location_id IS NULL THEN country_id
Abfrage. 9 ELSE location_id
10 END;
Die Case Klausel zeigt dabei dasselbe Verhalten wie 11
q
3
Kontroll- bzw. Schleifenstrukture
28
© Dipl.Ing.-Paul Panhofer Bsc.
Zur Filterung der Datensätze einer Abfrage Grundsätzlich formuliert ein Abfrageobjekt eine Be-
können in der where Klausel Bedingungen de- dingung in Form einer mathematischen Aussage.
finiert werden.
‚ Evaluiert die Prüfung einer Bedingung für einen Da- Verknüpfungsoperatoren werden verwendet
tensatz nicht zu true, wird der Datensatz aus der um Bedingungen miteinander zu verknüpfen.
Datenbasis der Abfrage entfernt. Die SQL Spezifikation definiert dazu die Ver-
knüpfungsoperatoren and, or, not und xor.
Query: where Klausel - Datenfilterung
1 -- ---------------------------------------- Erklärung: Logische Operatoren
2 -- WHERE Klausel
3 -- ----------------------------------------
‚ Zur Formulierung komplexer Bedingungen werden
die logischen Operatoren and, or bzw not verwen-
4 SELECT last_name, first_name, job_id,
det. Hit Hilfe dieser Operatoren können mehrere Be-
5 department_id,
dingungen miteinander verknüpft werden.
6 salary
7 FROM employees
8 WHERE job_id = ’SA_MAN’ Query: Logische Operatoren:
9 ORDER BY last_name, first_name; 1 -- ----------------------------------------
10 2 -- logische Operatoren: and, or, not
11 SELECT last_name, first_name 3 -- ----------------------------------------
12 FROM employees 4 SELECT last_name, first_name, salary,
13 WHERE salary > 4000; 5 department_name,
6 department_id
q 7 FROM employess
8 WHERE
9 (job_id = ’CLERK’ or job_id = ’MAN’)
10 and
11 (salary > 100 or last_name = ’Mel’)
12 ORDER BY last_name, first_name;
29
Informationssysteme
Der like Operator ermöglicht es Zeichenketten auf das Mit dem is Operator kann geprüft werden, ob der Wert
Vorhandensein bestimmter Zeichenfolgen zu prüfen. einer bestimmten Spalte bekannt ist.
q
q
30
© Dipl.Ing.-Paul Panhofer Bsc.
and Die Verknüpfung logischer Terme mit einem and wird als first_name like ’A_’ and salary > 1000
Konjunktion bezeichnet. Eine Konjunktion ist wahr wenn je-
der angegebene logische Term wahr ist.
or Die Verknüpfung logischer Terme mit einem or wird als Dis- salary < 0 or salary > 20000
junktion bezeichnet. Ein Disjunktion ist wahr wenn einer der
angegebenen Terme wahr ist.
not Die Negation ist ein Operator zur Verneinung logischer not salary = 2000
Aussagen
in Der in Operator prüft ob ein gegebener Wert in einer Liste department_id in (106, 107, 109)
von Werten enthalten ist.
like Der like Operator prüft alphanumerische Werte auf das Vor- first_name like K%
handensein von Mustern.
is Der is Operator prüft ob der Wert für eine bestimmte Spalte department_id is not null
bekannt ist.
between Der between Operator prüft ob ein Wert in einem Intervall salary between 10000 and 14000
von Werten enthalten ist.
Die SQL Spezifikation kennt zum Unterschied ‚ Die Spalte commission_pct enthält null Werte. Be-
zu anderen Programmiersprachen 3 Wahr- rechnungen auf null Werten sind problematisch.
heitswerte: true, false und null. Wird z.B.: zu einer Zahl eine unbekannte Zahl ad-
diert, ist das Ergebnis wieder eine unbekannte Zahl.
Der null Wert kann mit nichts verglichen werden, ‚ Zur Verarbeitung von Nullwerten definiert die SQL
er ist weder falsch noch wahr sondern eben einfach Spezifikation die coalesce Funktion.
unbekannt.
Die coalesce Funktion erlaubt die Angabe eines
and t f n or t f n Defaultwerts, der immer dann herangezogen wird,
t t f n t t t t wenn der Spaltenwert eines Datensatzes unbekannt
f f f f f t f n ist.
n n f n n t n n Query: Mit Nullwerten arbeiten
1 -- ----------------------------------------
Mit dem null Wert verlassen wir die Welt der intuitiv 2 -- Mit Nullwerten arbeiten
erfassbaren Logik und führen eine dreiwertige Logik 3 -- ----------------------------------------
ein, die neben wahr und falsch noch unbekannt als 4 SELECT last_name, first_name,
Wahrheitswert kennt. Der null Wert kann mit nichts 5 department_id,
verglichen werden. Die Negation eines unbekannten 6 (salary * 12) +
Werts ist selbst wieder unbekannt. 7 coalesce(commission_pct, 0.3)
8 FROM employees;
31
Informationssysteme
32
© Dipl.Ing.-Paul Panhofer Bsc.
q q
33
Informationssysteme
L Relationale Modell
Das Relationale Modell beschreibt die grund-
legende Tabellen- bzw. Beziehungsstruktur ei-
ner relationalen Datenbank.
3.1.2 Datenaggregation
34
© Dipl.Ing.-Paul Panhofer Bsc.
‚ Für komplexe Abfragen können Datenbankobjekte ‚ Eine Virtuelle Tabllen entspricht inhaltlich der
über einen relationalen Join in Beziehung gesetzt Kombination der ursprünglichen Datenbankobjek-
werden. te.
35
Informationssysteme
Ein Inner Join führt die Datensätze zweier Datenban- Ein cross join führt Datensätze zweier Datenbankob-
kobjekte genau dann zusammen, wenn für die Daten- jekte zusammen, indem jeder Datensatz des ersten Ob-
sätze die angegebenen join Bedingungen erfüllt sind. jekts mit jedem Datensatz des zweiten Objekts in Be-
ziehung gesetzt wird.
Erklärung: Join Bedingung
Erklärung: Cross Join
‚ Bei der Definition eines Inner Joins werden die Da-
tenobjekte angegeben die über den Join in Bezie-
‚ Das Ergebnis eines cross joins enthält damit m*n Zei-
len wenn die eine Tabelle m und die andere Tabelle
hung gesetzt werden sollen. Gleichzeitig wird eine
n Zeilen enthält.
Bedingung formuliert, die für die Datensätze beider
Datenobjekte gelten muß. Syntax: Cross Join
‚ Syntaktisch wird die Join Bedingung mit dem 1 -- ----------------------------------------
Schlüsselwort on eingeleitet. 2 -- Syntax: Cross Join
3 -- ----------------------------------------
Syntax: Inner Join 4 FROM <Table1> cross join <Table2>
1 -- ---------------------------------------- 5
q q
36
© Dipl.Ing.-Paul Panhofer Bsc.
Der Full Outer Join entspricht einer Kombination aus Der Left Join übernimmt alle Datensätze des ur-
Left- und Rightjoin. sprünglichen Datenobjekts als Datenbasis. Alle Da-
tensätze des anderen Datenobjekts, die die angegebene
Erklärung: Full Outer Join
Join Bedingung erfüllen, werden dann mit der Daten-
‚ Mengentheoretisch entspricht der Full outer Join basis in Relation gesetzt.
zweier Mengen A und B der Vereinigungsmenge der
beiden Mengen. Left- und Right Join beschreiben denselben Jointyp,
wobei die Rolle der definierten Datenobjekte jeweils
‚ Der full outer join zweier Mengen ist eine kommu-
anderweitig ausgewertet werden.
tative Relation.
Syntax: Full Outer Join Erklärung: Left-/Right Join
1 -- ------------------------------------------- ‚ Mengentheoretisch entspricht der left join zweier
2 -- Syntax: Full Outer Join Tabellen A und B der Menge A.
3 -- -------------------------------------------
4 FROM <Tabele1> FULL OUTER JOIN <Tabele2> ‚ Die Syntax ist dabei bis auf die Schlüsselwörter left
5 on <Bedingung> bzw. right identisch zur Syntax des Inner Join. ent-
6
gegengesetzter Richtung.
7 -- Beispiel: FULL OUTER JOIN ‚ Der left- bzw. right Join ist keine kommutative Re-
8 SELECT e.last_name, e.first_name, lation.
9 d.department_id
10 FROM employees e Syntax: Left Join/Right Join
11 FULL OUTER JOIN departments d 1 -- ----------------------------------------
12 ON e.department_id = u.department_id; 2 -- Syntax: Left Join
3 -- ----------------------------------------
q 4 FROM <Table1> LEFT JOIN <Table2>
5 ON <Join Bedingung>
6
q q
37
Informationssysteme
. .
38
© Dipl.Ing.-Paul Panhofer Bsc.
. .
39
Informationssysteme
4.1.1 Funktionstypen
r Zeilenfunktionen
Zeilenfunktionen verarbeiteten die Daten ei-
nes einzelnen Datensatzes. Der Rückgabe-
wert einer Zeilenfunktion ist stets ein einzelner
Wert.
Aggregatfunktionen
Aggregatfunktionen verdichten mehrere Da-
tensätze zu einem einzelnen Wert.
q
01. Grundlagen: Zeilenfunktionen 40
Erklärung: Zeilenfunktionen
‚ Die SQL Spezifikation definiert eine Reihe von Zei-
lenfunktionen.
1 -- --------------------------------------
2 -- Zeilenfunktionen
3 -- --------------------------------------
4 -- Die Funktion gibt das aktuelle Datum
5 -- des Datenbankservers zurueck
6 -- Da die FROM Klausel fuer eine select
7 -- Abfrage obligatorisch ist wird die
8 -- Pseudotabelle dual verwendet
9 SELECT sysdate FROM dual;
10
40
© Dipl.Ing.-Paul Panhofer Bsc.
10 FUNCTION to_char(
Die SQL Spezifikation unterscheidet mehrere Katego-
11 p_date IN DATE,
rien von Zeilenfunktionen.
12 p_time_mask IN VARCHAR2
13 )
Auflistung: Kategorien von Zeilenfunktionen
14 RETURN VARCHAR2;
‚ Datumsfunktionen: Funktionen zum Bearbeiten 15
zeitbezogener Daten. 16 FUNCTION trunc (
1 -- -------------------------------------- 17 p_date IN DATE,
2 -- Datumsfunktion: to_date 18 p_mask IN VARCHAR2
3 -- -------------------------------------- 19 )
4 FUNCTION to_date ( 20 RETURN DATE;
5 p_time_literal IN VARCHAR2,
6 p_time_mask IN VARCHAR2 q
7 )
8 RETURN DATE;
4.2.1 Datumstypen vs. Zeichenketten
‚ Zeichenfunktionen: Funktionen zum Bearbeiten
von Zeichenketten. L Datumswerte
1 -- -------------------------------------- Datumswerte werden verwendet um zeitbe-
2 -- Zeichenfunktion: instr zogene Werte in einer Datenbank abzubilden.
3 -- --------------------------------------
4 FUNCTION instr ( Die SQL Engine speichert Datumswerte dabei
5 p_content IN VARCHAR2, als die Anzahl von Millisekunden, die seit dem
6 p_token IN VARCHAR2, 01.01.1972 vergangen sind.
7 p_start_index IN INTEGER
8 )
Erklärung: Darstellung von Datumstypen
9 RETURN NUMBER;
‚ Bevor ein Datumswert angezeigt werden kann, muß
er durch die Datenbankengine entsprechend forma-
‚ Mathematische Funktionen: Funktionen zur Trans
tiert werden.
formation von Zahlenwerten.
q q
41
Informationssysteme
10 -- Aufruf: to_date()
4.2.3 Konstrukturfunktionen
11 SELECT to_date (
Die SQL Spezifikation definiert die sysdate und 12 ’15.05.2012 17:30:56’,
systimestamp Funktionen zum Erzeugen von Datums- 13 ’dd.mm.yyyy hh24:mi:ss’
werten. 14 )
15 FROM dual;
Die sysdate und systimestamp Funktionen werden
ohne Parameter aufgerufen, und liefern als Ergebnis
q
die aktuelle Zeit des Datenbankservers.
q q
42
© Dipl.Ing.-Paul Panhofer Bsc.
Die to_char() Funktion konvertiert Datumswerte in Die SQL Spezifikation definiert 2 Funktionen zum Run-
Zeichenketten. den von Datumswerten: trunc() und round().
Parameter: to_char Funktion Die round und trunc Funktionen unterscheiden sich
‚ p_date: Der Parameter beschreibt einen Datums- ausschließlich in ihrem Rundungsverhalten. Beide
wert. Funktionen arbeiten mit denselben Parametern.
17 -- Ausgabe: 10.09.2008
43
Informationssysteme
add_months() Die add_months Funktion arbeitet analog zur Datumsarithmetik und erlaubt die Additi- 46
on von Monaten zu einem Datumswert.
extract() Die extract Funktion erlaubt die Extraktion bestimmter Teile aus einem Datum. 46
last_day() Die last_day Funktion berechnet den letzten Tag des Monats in den das Datum fällt. 46
months_between() Die months_between Funktion berechnet die Differenz zweier Datumswerte. Der Wert 47
wird dabei auf Monate gerundet. Dabei werden Schaltjahre und Monatslängen
berücksichtigt.
next_day() Die next_day Funktion berechnet für ein gegebenes Datum das Datum des nachfol- 47
genden Tages.
to_char() Die to_char() Funktion konvertiert eine Datumsangaben in eine Zeichenketten. 43
25 12 -- Ausgabe
26 13 3-0 -- Jahre
27 -- Ausgabe 14 1-0 -- Monate
28 12.05.2017 00:00:00 -- hiredate 15 64 0:0:0.0 -- Tage
29 01.05.2017 00:00:00 -- month 16 1 12:0:0.0 -- Stunden
30 01.04.2017 00:00:00 -- quarter 17 0 1:45:0.0 -- Minuten
31 01.01.2017 00:00:00 -- year 18 0 0:10:35.0 -- Sekunden
q q
44
© Dipl.Ing.-Paul Panhofer Bsc.
year to month Das Literal repräsentiert ein Zeitintervall aus Jahren und Monaten.
day to minute Das Literal repräsentiert ein Zeitintervall. Der Wert beschreibt ein Zeitintervall von Tagen,
Stunden und Minuten.
day to second Das Literal repräsentiert ein Zeitintervall. Der Wert beschreibt ein Zeitintervall von Tagen,
Stunden, Minuten und Sekunden.
4.2.9 Geschachtelte Intervalle darstellt mit einem Ganzzahlanteil, der die Anzahl
der Tage seit einem Startdatum wiedergibt, und einen
Die SQL Spezifikation erlaubt die Definition geschach- Nachkommaanteil, der den Anteil des Tages benennt,
telter Intervalle. Die Intervalle werden als Literale de- der bereits vergangen ist.
finiert.
Erklärung: Datumsarithmetik
‚ Die SQL Spezifikation erlaubt das Rechnen mit
Datumswerten. Durch die Angabe von Intervallen
können einfache Berechnungen mit Datumswerten
durchgeführt werden.
‚ Dabei kümmert sich die Datenbankengine um Fin-
digkeiten wie wieviele Tage ein bestimmtes Monat
hat oder ob ein Jahr ein Schaltjahr ist.
‚ Die Datumsarithmetik unterstütz dabei die Additi-
on bzw. die Subtraktion von Datumswerten ausge-
hend von einem bestimmten Zeitpunkt.
Query: Geschachtelten Intervallen
‚ Die Addition ist dabei eine arithmetische Operati-
1 -- ----------------------------------------
on auf einem Datumswert und einem Zeitintervall.
2 -- Geschachtelte Intervalle
3 -- ---------------------------------------- ‚ Die Subtraktion ist die einzige sinnvolle direkte
4 SELECT arithmetische Operation auf 2 Datumswerten.
5 interval ’2-11’ year to month intervall_1,
‚ Im Fall der Subtraktion des Datentyps date ist
6 interval ’4 3:30’ day to minute intervall_2,
das Ergebnis eine Zahl.
7 interval
8 ’4 3:30:45’ day to second intervall_3 ‚ Im Fall der Subtraktion des Datentyps timestamp
9 FROM dual; ein Interval.
10
Query: Datumsarithmetik
11 -- Ausgabe
1 -- ----------------------------------------
12 2-11 -- intervall_1
2 -- Datumsarithmetik
13 3:30:0.0 -- intervall_2
3 -- ----------------------------------------
14 3:30:45.0 -- intervall_3
4 SELECT trunc(sysdate)
5 + interval ’3’ month
q 6 + interval ’1’ day
7 + interval ’1’ day
8 + interval ’2 15:20’ day to minute
4.2.10 Datumsarithmetik
9 FROM dual;
Das Rechnen mit Datumswerten ist dann leicht, wenn
wir uns vergegenwärtigen, daß ein Datum eine Zahl q
45
Informationssysteme
Die add_months() Funktion arbeitet analog zur Da- Die extract() Funktion ermöglicht die Extraktion be-
tumsarithmetik und erlaubt die Addition von Mona- stimmter Teile eines Datumswertes.
ten zu einem Datumswert.
Syntax: extract Funktion
Parameter: add_months Funktion 1 -- ----------------------------------------
‚ Die Funktion erwartet 2 Parameter. add_months 2 -- Syntax: extract
arbeitet mit Datenwerten vom Typ Date bzw. 3 -- ----------------------------------------
Timestamp und liefert als Ergebnis jedoch immer 4 FUNCTION extract (
einen Wert vom Typ Date zurück. 5 p_param IN EXPR
6 )
‚ Ein negativer Wert der Monatsangabe subtrahiert 7 RETURN INTEGER;
die entsprechende Anzahl von Monaten. 8
9 -- ----------------------------------------
Syntax: add_months Funktion 10 -- Datumsfunktion: extract
1 -- ---------------------------------------- 11 -- ----------------------------------------
2 -- Syntax: add_months 12 SELECT extract(year from sysdate) year,
3 -- ---------------------------------------- 13 extract(month from sysdate) month,
4 FUNCTION add_months ( 14 extract(day from sysdate) day
5 p_date IN DATE, 15 FROM dual;
16
6 p_month_amount IN INTEGER
7 ) 17 2017 -- year
8 RETURN DATE; 18 7 -- month
9
19 30 -- day
10 -- ----------------------------------------
11 -- Aufruf add_months q
12 -- ----------------------------------------
13 SELECT add_months(trunc(sysdate), 3)
4.2.14 Datumsfunktion: last_day()
14 FROM dual;
Die last_day() Funktion berechnet den letzten Tag
des Monats in den der angegebene Datumswert fällt.
q
q
q
46
© Dipl.Ing.-Paul Panhofer Bsc.
10 -- Aufruf
11 SELECT next_day(sysdate, ’Freitag’)
12 FROM dual;
10 -- Aufruf
11 SELECT trunc(
12 months_between( sysdate, hiredat )
13 )
14 FROM employees;
47
Informationssysteme
Die SQL Spezifikation definiert eine Zahl von Funktio- Die trim() Funktion wird verwendet um Token am
nen zur Verarbeitung von Zeichenketten. Ende bzw. am Anfang einer Zeichenkette zu entfernen.
Die SQL Spezifikation definiert mehrere Formen der
trim() Funktion.
4.3.1 Textfunktion: instr()
Syntax: trim(), ltrim(), rtrim()
Die instr() Funktion prüft, ob ein Token in einer Zei- 1 -- ---------------------------------------
chenkette enthalten ist und gibt die Position bei einer 2 -- Syntax: trim, ltrim, rtrim
Übereinstimmung zurück. 3 -- ---------------------------------------
4 FUNCTION ...trim... (
Parameter: instr() Funktion 5 p_text IN VARCHAR2,
‚ p_content: Der Parameter beschreibt die zu durch- 6 p_token IN VARCHAR2
suchende Zeichenkette. 7 )
8 RETURN VARCHAR2;
‚ p_token: Der Parameter beschreibt den Token nach 9
dem gesucht wird. 10 -- ----------------------------------------
‚ p_start_index: Der Paramter beschreibt die Posi- 11 -- Textfunktion: lefttrim, righttrim
tion ab der die Zeichenkette durchsucht werden soll. 12 -- ----------------------------------------
Der Parameter ist optional und ist defaultmäßig mit 13 SELECT ltrim(’<Das ist ein Element/>’,’<’)
dem Wert 1 initialisiert. 14 FROM dual;
15
‚ p_count: Der Parameter definiert welches Vorkom- 16 -- Ausgabe
men des Tokens ermittelt werden soll. Der Parame- 17 Das ist ein Element/>
ter ist optional und ist defaultmäßig mit dem Wert 18
1 initialisiert. 19 -- rtrim
20 SELECT rtrim(’<Das ist ein Element/>’, ’/>’)
Syntax: instr Funktion
21 FROM dual;
1 -- ---------------------------------------- 22
2 -- Syntax: instr 23 -- Ausgabe
3 -- ---------------------------------------- 24 <Das ist ein Element
4 FUNCTION instr ( 25
5 p_content IN VARCHAR2, 26 -- ----------------------------------------
6 p_token IN VARCHAR2, 27 -- Textfunktion: trim
7 p_start_index IN INTEGER DEFAULT 1, 28 -- ----------------------------------------
8 p_count IN INTEGER DEFAULT 1 29 SELECT
9 ) 30 trim(both ’.’ from ’...SMITH...’) text_1,
10 RETURN NUMBER; 31 trim(leading ’.’ from ’...SMITH...’) text_2,
11
32 trim(trailing ’.’ from ’...SMITH...’) text_3
12 -- ---------------------------------------- 33 FROM dual;
13 -- Textfunktion: instr 34
14 -- ---------------------------------------- 35 -- Ausgabe
15 SELECT 36 SMITH -- text_1
16 instr(’/home/foo.txt’, ’/’) pos_1, 37 SMITH... -- text_2
17 instr(’/home/foo.txt’, ’/’, 1, 2) pos_2 38 ...SMITH -- text_3
18 FROM dual; 39
19
40 SELECT trim(’ SMITH ’) FROM dual;
20 -- Ausgabe 41
21 1 -- pos_1 42 -- Ausgabe
22 6 -- pos_2 43 SMITH
q
q
48
© Dipl.Ing.-Paul Panhofer Bsc.
instr() Die instr() Funktion prüft, ob ein Token in einer Zeichenkette enthalten ist und gibt die Position 48
bei einer Übereinstimmung an.
length() Mit der length Funktion wird die Länge einer Zeichenkette berechnet. Der Rückgabewert ist 49
dabei als die Anzahl von bytes bzw. die Anzahl von Zeichen zu lesen.
lower() Mit der lower() und upper() Funktion werden Zeichenfolgen transformiert. 50
replace() Mit der replace Funktion wird eine Zeichenkette in einem Text durch eine andere Zeichenkette 50
ersetzt.
soundex() Die soundex Funktion führt einen Vergleich zwischen Zeichenketten durch. Der Vergleich be- 49
wertet die phonetische Änlichkeit von Zeichenketten.
substr() Die substr Funktion wird verwendet um aus einer Zeichenkette einen Teilstring zu extrahieren. 50
trim() Mit den unterschiedlichen Formen der trim Funktion werden am Ende bzw. Anfang einer Zei- 48
chekette Zeichenfolgen entfernt.
upper() Mit der lower() und upper() Funktion werden Zeichenfolgen transformiert. 50
Mit Hilfe der length() Funktion wird die Länge einer Mit der soundex() Funktion wird die phonetische
Zeichenkette bestimmt. Der Rückgabewert kann dabei Kennzahl einer Zeichenkette bestimmt werden.
in Form von bytes bzw. als Anzahl von Zeichen ausge-
geben werden. Syntax: soundex Funktion
1 -- ----------------------------------------
Syntax: length Funktion 2 -- Syntax: soundex
1 -- ---------------------------------------- 3 -- ----------------------------------------
2 -- Syntax: length 4 FUNCTION soundex (
3 -- ---------------------------------------- 5 p_text IN VARCHAR2
4 FUNCTION length ( 6 )
5 p_text IN VARCHAR2 7 RETURN VARCHAR2;
8
6 )
9
7 RETURN INTEGER;
8
10 -- ----------------------------------------
9 -- ---------------------------------------- 11 -- Textfunktion: soundex
10 -- Textfunktion: length 12 -- ----------------------------------------
11 -- ---------------------------------------- 13 SELECT last_name, job_id
12 SELECT 14 FROM employees
13 length (’Toromtomtom’) zeichen, 15 WHERE soundex_ger(last_name) in (
14 lengthb(’Toromtomtom’) byte 16 soundex_ger(’Meier’),
15 FROM dual; 17 soundex_ger(’Mayer’),
16
18 soundex_ger(’Meyer’),
17 -- Ausgabe 19 soundex_ger(’Mair’),
18 11 -- zeichen 20 soundex_ger(’Maier’),
19 15 -- byte 21 soundex_ger(’Mayr’),
22 soundex_ger(’Meir’)
23 );
q
49
Informationssysteme
50
© Dipl.Ing.-Paul Panhofer Bsc.
G Liefert den Tausendertrenner. Im deutschen Sprachraum wird das Komma verwendet. 9G999G999
,(Komma) Wird als Tausendertrenner nach amerikaischem Standard verwendet und kann mehr- 9,999,999
fach vorhanden sein, allerdings weder als erstes Zeichen noch rechts vom Dezimalt-
renner bzw. Punkt.
D Liefert das Dezimaltrennzeichen. Im deutschen Sprachraum ist das ein . 9G999D00
.(Punkt) Wird als Dezimaltrenner nach amerikanischem Standard verwendet und darf daher 9,999.00
nur einmal vorkommen.
C Liefert das ISO Währungssymbol an der angegebenen Stelle C9G990D00
51
Informationssysteme
10 -- ---------------------------------------- 10 -- ----------------------------------------
11 -- Syntax: trunc 11 -- Konvertierungsfunktion: to_number
12 -- ---------------------------------------- 12 -- ----------------------------------------
13 SELECT trunc(12345.678) n_1, 13 SELECT
14 trunc(12345.678, 1) n_2, 14 to_number(’12345’) n_1,
15 trunc(12345.678, 2) n_3, 15 to_number(’123,45’) n_2,
16 trunc(12345.678, -2) n_6, 16 to_number(’123.45,21’, ’999G99D99’) n_3,
17 trunc(12345.678, -1) n_7 17 FROM dual;
18 FROM dual; 18
19 19
20 20 -- Ausgabe
21 -- Ausgabe 21 12345 -- n_1
22 12345 -- n_1 22 123.45 -- n_2
23 12345.6 -- n_2 23 12345.45 -- n_3
24 12345.67 -- n_3
25 12300 -- n_6
q
26 12340 -- n_7
52
© Dipl.Ing.-Paul Panhofer Bsc.
Die exp Funktion berechnet die mathematische Expo- Die mod Funktion gibt den Rest von m geteilt durch n
nentialfunktion für einen numerischen Wert. Die log als Ergebis zurück.
Funktion gibt den Logarithmus von n zur Basis m zu-
Query: mod Funktion
rück.
1 -- ----------------------------------------
Query: exp, log Funktion 2 -- Syntax: mod
1 -- ---------------------------------------- 3 -- ----------------------------------------
2 -- Syntax: exp, log 4 FUNCTION mod (
3 -- ---------------------------------------- 5 p_m IN Number,
4 FUNCTION exp ( 6 p_n IN Number
5 p_m IN Number 7 )
6 ) 8 RETURN NUMBER;
7 RETURN NUMBER; 9
8 10 -- ----------------------------------------
9 FUNCTION log ( 11 -- Example: mod
10 p_n IN Number, 12 -- ----------------------------------------
11 p_m IN Number 13 SELECT
12 ) 14 mod(15, 4) n_1,
13 RETURN NUMBER; 15 mod(15, 3) n_2,
14 16 mod(15, 0) n_3,
15 -- ---------------------------------------- 17 mod(11.6, 2) n_4,
16 -- Example: exp, log 18 mod(-15, 4) n_5,
17 -- ---------------------------------------- 19 mod(-15, 0) n_6,
18 SELECT 20 FROM dual;
19 exp(3) n_1, 21
q q
53
Informationssysteme
L Aggregation
Aggregation bezeichnet das Zusammenfas-
sen einer Reihe von Fakten zu einem einzelnen
Wert.
5.1.1 Aggregatfunktionen
1 -- --------------------------------------
2 -- Aggregatfunktionen
3 -- --------------------------------------
4 -- Berechnet die Anzahl aller Angestellen
5 SELECT count(employee_id) FROM employees;
6
54
© Dipl.Ing.-Paul Panhofer Bsc.
q
q
55
Informationssysteme
Erklärung: Ausführungsreihenfolge der Klauseln ‚ Nach dem Abschluss der Aggregate Phase ist die
Neustrukturierung der Daten abgeschlossen.
select Anweisung q
q q
56
© Dipl.Ing.-Paul Panhofer Bsc.
Erklärung: Group by Klausel ‚ Wir möchten nun wissen, wieviele Mitarbeiter in den
‚ Die disjunkten Werte, der in der group by Klausel einzenen Abteilungen, aufgeteilt auf die unterschied-
angegebenen Spalten, definieren die Gruppen auf die lichen Länder, arbeiten.
der Datenbestand verteilt werden soll.
Query: Group by Klausel
‚ Wird in einer Abfrage beispielsweise nach der 1 -- -------------------------------------------
department_id Spalte gruppiert, erfolgt eine Ver- 2 -- Group by Klausel
teilung der Datensätze des Datenbestandes auf die 3 -- -------------------------------------------
unterschiedlichen Abteilungen des Unternehmens. 4 SELECT department_id, country_id
5 count(employee_id) employee_count,
1 -- --------------------------------------
6 max(salary) max_salary,
2 -- Group by Klausel
7 min(salary) min_salary,
3 -- --------------------------------------
8 sum(salary) department_cost
4 SELECT department_id, count(employee_id),
9 FROM employees
5 avg(salary)
10 JOIN departments USING(department_id)
6 FROM employees
11 JOIN regions USING(region_id)
7 GROUP BY department_id;
12 GROUP BY country_id, department_id;
57
Informationssysteme
58
© Dipl.Ing.-Paul Panhofer Bsc.
1 -- --------------------------------------
2 -- having Klausel
3 -- --------------------------------------
4 SELECT department_id, min(salary) min_sal
5 FROM employees
6 JOIN departments USING (department_id)
7 GROUP BY department_id, job_id
8 HAVING sum(salary) < 10000;
L Null Aggregat
Als Null Aggregat werden virtuelle Gruppen
bezeichnet, die aus Datensätzen bestehen
die keiner konkreten Gruppe zugeordnet wer-
den können.
59
Informationssysteme
L Unterabfragen
Unterabfragen sind select Ausdrücke, die in
SQL Abfragen eingebettet werden.
6.1.1 Unterabfragen
Analyse: Unterabfragen
‚ Um diese Fragestellung beantworten zu können,
müßten wir erst einmal wissen wie hoch das gerings-
te Einkommen im Unternehmen ist, um anschlie-
ßend zu ermitteln, welche Mitarbeiter ein entspre-
chendes Einkommen beziehen.
01. Unterabfragen 60
‚ Das Problem: Zur Beantwortung der vorhergehen-
den Frage müßten 2 Abfragen zur selben Zeit abge-
02. With Klausel 63 setzt werden können.
03. Paarweise Vergleich 64 ‚ Wir brauchen damit einen neuen Ansatz: Unterab-
fragen.
04. Mengenoperationen 64
05. Quantoren 66
Erklärung: Unterabfragen
‚ Unterabfragen sind select Ausdrücke die in SQL
Abfragen eingebettet werden. Die SQL Spezifikati-
on erlaubt Unterabfragen in der select, from, where
bzw. having Klausel.
60
© Dipl.Ing.-Paul Panhofer Bsc.
Die SQL Spezifikation definiert mehrere Arten von Un- Unterabfragen in der from Klausel werden als Innere
terabfragen. Views bezeichnet.
Unterabfragen in der from Klausel werden als ‚ Innere Views werden dabei vor der eigentlichen Ab-
Innere Views bezeichnet. frage ausgewertet. Das Ergebnis der Inneren View
bildet in diesem Fall die Datenbasis einer Abfrage.
In der from Klausel einer Abfrage wird die Da-
tenbasis einer Query definiert. Das Ergebnis ‚ Das Ergebnis der Auswertung wird dabei in einer
der Inneren View bildet in diesem Fall die Da- virtuellen Tabelle gepeichert.
tenbasis der Abfrage.
Query: Innere View Beispiele
Unterabfragen in der where Klausel bzw. ha- 13 SELECT e.frist_name, e.last_name, e.salary
ving Klausel werden als Konditionale Abfra- 14 e.department_id,
gen bezeichnet. 15 e.job_id
16 FROM employees e JOIN
Das Ergebins einer Konditionale Abfrage wird 17 (SELECT min(salary) m_sal
für die Auswertung der having bzw. where 18 FROM employees) sub_query
Klausel herangezogen. 19 ON e.salary = sub_query.m_sal
20 ORDER BY e.department_id;
q q
61
Informationssysteme
Innere View Unterabfragen in der from Klausel werden als Innere Views bezeichnet. Das Ergebnis einer 61
Inneren View bildet in diesem Fall die Datenbasis einer Abfrage.
Skalare Abfrage Subqueries die nach Ihrer Auswertung durch die Datenbankengine als Ergebnis lediglich 62
einen einzelnen Datensatz enthalten, werden als Skalare Abfragen bezeichnet. Skalare Ab-
fragen können in der select, from, where bzw. having Klausel definiert werden.
Konditionale Unterabfragen in der where Klausel bzw. having Klausel werden als Konditionale Abfragen 62
Abfrage bezeichnet. Das Ergebins einer Konditionale Abfrage wird für die Auswertung der having bzw.
where Klausel herangezogen.
With Klausel Mit der with Klausel kann SQL Code einfach und lesbar strukturiert werden. Dazu wird in der 63
with Klausel eine Liste von Queries definiert, die anschließend in der eigentlichen Abfrage
referenziert werden können.
Union Die union Klausel wird verwendet, um die Ergebnismengen zweier oder mehrerer select An- 64
weisungen miteinander zu kombinieren.
Intersect Die intersect Klausel wird verwendet, um die Durchschnittsmenge zweier oder mehrerer select 65
Anweisungen zu bilden.
Except Die except Klausel wird verwendet, um die Differenzmenge zweier oder mehrerer select An- 65
weisungen zu bilden.
Quantoren ??
Hierarchische ??
Abfragen
Subqueries die nach der Auswertung durch die SQL Unterabfragen in der where bzw. having Klausel wer-
Datenbankengine im Ergebnis lediglich einen einzel- den als Konditionale Unterabfragen bezeichnet.
nen Datensatz enthalten, werden als Skalare Abfragen
bezeichnet. Erklärung: Konditionale Abfrage
q q
62
© Dipl.Ing.-Paul Panhofer Bsc.
Datenbankabfragen für komplexe Fragestellungen sind In SQL Abfragen wird die with Klausel vor der select
oft schwer zu lesen bzw. zu verstehen. Klausel definiert.
Mit steigender Komplexität muss einen Weg gefun- Syntax: WITH Klausel
den werden, Abfragecode zu strukturieren. 1 -- ----------------------------------------
2 -- Syntax: with Klausel
Erklärung: Codestrukturierung 3 -- ----------------------------------------
‚ SQL Code wird im Gegensatz zu funktionalen Pro- 4 WITH query_name1 AS (
grammiersprachen nicht über Unterprogrammen, 5 SELECT ...
sondern mit der Hilfe von Unterabfragen struktu- 6 ), query_name2 AS (
riert. 7 SELECT ...
8 ), query_name3 AS (
‚ Die Strukturierung von SQL Code mit Unterabfra- 9 SELECT ...
gen führt jedoch zu einer Verschachtelung des Ab- 10 )
fragecodes. 11 SELECT ...
‚ Unterabfragen müssen dabei von innen nach außen 12 FROM query_name1 q1
ausgewertet werden. 13 JOIN query_name2 q2 on ...
14 ...;
q 15
16 -- ----------------------------------------
17 -- Query: with Klausel
6.2.1 WITH Klausel - Strukturierung
18 -- ----------------------------------------
19 WITH rep_employees AS (
3 WITH Klausel - Strukturierung 20 SELECT max(salary) max_sal,
Mit der with Klausel kann SQL Code einfach 21 e.department_id
und lesbar strukturiert werden. Dazu wird in 22 FROM employees e
der with Klausel eine Liste von Queries defi- 23 GROUP BY e.department_id
niert, die anschließend in der eigentlichen Ab- 24 )
frage referenziert werden können. 25 SELECT e.department_id
26 e.first_name
Die in der with Klausel definierten Abfragen 27 FROM employees e
werden als Innere Views referenziert. 28 JOIN rep_employees r ON
29 e.salary = r.max_sal AND
30 e.department_id = r.department_id
q
31 JOIN departments d ON
32 d.department_id = e.department_id
33 ORDER BY d.department_name;
63
Informationssysteme
q q
64
© Dipl.Ing.-Paul Panhofer Bsc.
Mit der intersect Klausel kann die Durchschnittsmen- Mit der except Klausel kann die Differenzmenge der
ge der Ergebnisdatensätze zweier oder mehrerer select Ergebnisdatensätze zweier oder mehrerer select Anwei-
Anweisungen ermittelt werden. sungen ermittelt werden.
q
q
65
Informationssysteme
6.5. Quantoren .
L Quantoren
66
© Dipl.Ing.-Paul Panhofer Bsc.
. .
67
Informationssysteme
7.1.1 Datenbankartefakte
L |
Auflistung: Datenbankartefakte
‚ Schema: Ein Schema ist ein logischer Namensraum
für die Tabellen eines Geschäftsfalls. Im Sparchge-
brauch wird ein Schema auch als Datenbank bezeich-
net. Ein Datenbankserver kann mehrere Datenban-
01. Datenbankartefakte 68
ken verwalten.
02. Tabelle 69 ‚ Tabelle: Ein Datenbankschema ist ein logischer Na-
mensraum für die Daten eines Geschäftfalls. Tabel-
03. View 72 len repräsentieren die Aspekte der Anwendungsda-
ten. Aus technischer Sicht speichern Tabellen Daten
04. Index 73 in Form von Datensätzen.
68
© Dipl.Ing.-Paul Panhofer Bsc.
CREATE TABLE Der CREATE TABLE Befehl wird zum Anlegen einer Tabelle in der Datenbank ver- 70
wendet. Der Befehl besitzt dabei 2 unterschiedliche Ausprägungen um die Struk-
tur der Tabelle zu definieren.
ALTER TABLE Der ALTER TABLE Befehl wird zum Bearbeiten der Struktur einer Tabelle in der Da- 71
tenbank verwendet. Der Befehl besitzt dabei unterschiedliche Ausprägungen und
Optionen zum Löschen bzw. Hinzufügen von Feldern bzw. Constraints.
DROP TABLE Der DROP TABLE Befehl wird zum Löschen einer Tabelle in der Datenbank 70
verwendet.
TRUNCATE TABLE Der TRUNCATE TABLE Befehl wird zum Löschen der Datensätze einer Tabelle 71
verwendet.
CREATE VIEW Der CREATE VIEW Befehl zum Anlegen einer View in der Datenbank verwendet. 72
DROP VIEW Der DROP VIEW Befehl zum Löschen einer View in der Datenbank verwendet. 73
CREATE SEQUENCE Der CREATE SEQUENCE Befehl zum Anlegen einer Sequenz in der Datanbank ver- ??
wendet. Der Befehl besitzt unterschiedliche Optionen um die Sequenz an den
geforderten Geschäftsfall anpassen zu können.
DROP SEQUENCE Der DROP SEQUENCE Befehl zum Löschen einer Sequenz aus der Datenbank ??
verwendet.
q q
69
Informationssysteme
Beim Anlegen einer Tabelle wird die Struktur der Ta- Der create table Befehl wird zum Anlegen einer Ta-
belle über Spaltendefinitionen definiert. belle verwendet.
Eine der Spalten der Tabelle muß als Schlüsselspal- DDL: employees, departments
te designiert werden. Diese Spalte wird nun als Pri- 1 -- ----------------------------------------
märschlüssel der Tabelle bezeichnet. 2 -- Fallbeispiel: hr schema
3 -- ----------------------------------------
4 CREATE TABLE employees (
L Primärschlüssel
5 employee_id NUMBER(19,0) NOT NULL,
Anhand eines Primärschlüssels können die in 6 salary NUMBER(10,0) NOT NULL,
der Tabelle gespeicherten Datensätze unter- 7 job_id NUMBER(19,0) NOT NULL,
schieden werden. 8 first_name VARCHAR(30) NOT NULL,
9 middle_name VARCHAR(30) NOT NULL,
Erklärung: Schlüsseldefinition 10 last_name VARCHAR(30) NOT NULL,
11 department_id NUMBER(19,0) NOT NULL,
‚ Ein Schlüssel kann aus einer oder mehreren Spalten
12
bestehen. Ein Schlüssel darf sich dabei nur aus so-
13 PRIMARY KEY (employee_id),
vielen Spalten zusammensetzen, die notwendig sind,
14 CONTRAINT fk_departments_dep_id
um die Datensätze der Tabelle zu identifizieren.
15 FOREIGN KEY (department_id)
‚ Schlüsseldefinition: Bestimmte Spalten der Tabelle 16 REFERENCES departments (department_id)
können auch als Fremdschlüsselspalten ausgewie- 17 );
sen werden. Fremdschlüssel sind Verweise auf Pri- 18
q q
70
© Dipl.Ing.-Paul Panhofer Bsc.
Der truncate table Befehl wird zum Löschen aller Der alter table Befehl wird verwendet um die Struk-
Datensätze einer Tabelle verwendet. tur der Tabellen der Datenbank zu verwalten.
Der alter table Befehl wird verwendet um die Struk- 13 ALTER TABLE c_projects DROP CONSTRAINT
tur der Tabellen der Datenbank zu verwalten. 14 uq_projects_code;
15
Der Befehl besitzt unterschiedliche Ausprägungen
16 ALTER TABLE c_projects ADD CONSTRAINT
und Optionen für das Löschen bzw. Hinzufügen von
17 check_legal_type CHECK
Feldern bzw. Constraints.
18 (legal_foundation IN (’P_26’, ’P_27’));
Syntax: alter table 19
q q
71
Informationssysteme
Mit einer View kann eine SQL Abfrage als Objekt in Views werden mit dem create view Befehlt angelegt.
der Datenbank gespeichert werden.
Je nach Situation können einzelne Klauseln der View
unwirksam sein oder zu unklaren Ergebnissen füh-
7.3.1 Datenbankartefakt: View ren.
q
q
72
© Dipl.Ing.-Paul Panhofer Bsc.
7.3.5 DDL Befehl: drop view ‚ Auswertungen auf indizierten Spalten haben im Ver-
gleich zu gewöhnlichen SQL Abfragen eine verbes-
Syntax: drop view serte Laufzeit.
1 -- ---------------------------------------- q
2 -- DDL: View lschen
3 -- ----------------------------------------
4 DROP VIEW employees_dep;
73
Informationssysteme
B* Index Datenbankindex zum Indexieren von Spalten mit alphanu- varchar, number
merischen bzw. numerischen Werten. z.B.: Nachnamen bzw.
Ortsnamen
Unique Index Datenbankindex zum Indexieren von Spalten mit einem unique unique Constraint
Constraint. z.B.: Spalten mit einem Primary Key Constraint.
Funktionsindex Datenbankindex zum Indexieren von Spalten deren Werte durch
Funktionen transformiert werden. z.B.: lower(first_name)
Volltextindex Datenbankindex zum Indexieren von Spalten die umfangreiche clob, word, pdf, html
Texte speichern.
Es sollte nur für jene Spalten einer Tabelle ein Index 7.4.3 Indextyp: Funktionsindex
definiert werden, die für die Sortierung bzw. Filte-
rung des Datenbestandes in select Abfragen relevant Ein funktionsbasierter Index stellt insofern eine Beson-
sind. derheit dar, als nicht ein Spaltenwert indiziert wird,
sondern das Ergebnis einer Funktion.
Analyse: Datenbankindex
‚ Ein Datenbankindex nimmt Speicherplatz in An- Erklärung: Funktionsbasierter Index
spruch. Je mehr Datensätze in einer Tabelle gespei- ‚ Für den funktionsbasierten Index wird also für jede
chert werden, desto mehr Speicher muß für einen zu inidizierende Zeile der Funktionswert berechnet
Index allokiert werden. und das Ergebnis im Index abgelegt.
‚ Insert, Update bzw Merge Anweisungen stoßen für ‚ Wird nun in einer Abfrage nach einer indizierten
indexierte Spalten eine Neuberechnung des Index an. Funktion gesucht, braucht diese Funktion nicht mehr
berechnet zu werden, sondern das Ergebnis wird di-
q
rekt aus dem Index gelesen.
q
q
74
© Dipl.Ing.-Paul Panhofer Bsc.
Für Datenbankspalten mit einem unique Constraint, Durch die Verwendung eines Volltextindex können
wird durch die Datenbankengine automatisch ein uni- Volltextsuchen in relationalen Datenbanken signifikant
que Index angelegt. beschleunigt werden.
q
q
75
Informationssysteme
7.5. Constraints
¤ Entitätsintegrität
Datenkonsistenz bzw. Datenintegrität beschreibt die Jeder Datensatz in der Datenbank muß ein-
Korrektheit, der in einer Datenbank gespeicherten deutig identifizierbar sein.
Daten.
Kann für eine Datenbank Datenkonsistenz nicht
garantiert werden, muß von Fehlern im Datenbe-
7.5.1 Datenkonsistenz und Integrität
stand ausgegangen werden.
Der Datenbestand einer Datenbank ist konsistent,
q
wenn alle Integritätsbedingungen erfüllt werden kön-
nen.
7.5.2 Datenbankconstraints
Auflistung: Integritätsbedingungen
Konstraints formulieren Bediengungen die Daten er-
Bereichsidentität füllen müssen bevor sie in den Datenbestand geschrie-
ben werden können.
Der Wert jedes Feldes eines Datensatzes muss
einem bestimmten Wertebereich zugeordnet
Auflistung: Arten von Constraints
werden können.
‚ not null: Legt fest, dass eine Spalte mit einem not
null Constraint immer einen Wert enthalten muss.
( Logische Konsistenz
‚ unique: Legt fest, dass eine Spalte mit einem uni-
Logische Konsistenz wird durch die Regeln der que Constraint für jede Zeile einen anderen Wert
durch die Anwendung vorgegebenen Ge- enthalten muss.
schäftsprozesse bestimmt.
‚ check: Der check Constraints: wird verwendet um
die logische Konsistenz in der Datenbank sicherzu-
( Referentielle Konsistenz stellen.
Beziehungen zwischen Datensätzen müssen ‚ primary key: Primary Keys werden verwendet um
zwischen logisch assozierten Objekten defi- Entitätsintegrität sicherzustellen.
niert sein.
q
76
© Dipl.Ing.-Paul Panhofer Bsc.
Bereichsintegrität Durch den Einsatz von Datentypen kann Bereichsintegrität für Datentypen
den Datenbestand einer Datenbank sichergestellt werden.
Entitätsintegrität Mit Primärschlüssel kann Entitätsintegrität für die Datensätze der PRIMARY KEY
Datenbank sichergestellt werden.
Referentielle Konsistenz Mit der Definition von Fremdschlüsseln kann referentielle Integri- FOREIGN KEY
tät für den Datenbestandes eines Geschäftsfalls sichergestellt
werden.
Logische Konsistenz Die SQL Spezifikation setzt den Check Constraint zur Verfügung CHECK CONSTRAINT
um logische Konsistenz zu implementieren.
77
Informationssysteme
q 36 CYCLE|NOCYCLE
78
© Dipl.Ing.-Paul Panhofer Bsc.
40 CACHE int|NOCACHE
41 -- bestimmt, wie viele Schluesselwerte im
42 -- Hauptspeicher bereitgestellt werden.
43 -- Bei NOCACHE werden keine Werte
44 -- vorgehalten
79
Informationssysteme
L insert command
Die insert Anweisung ist ein Befehl zum Einfü-
gen von Daten in Datenbanktabellen.
( merge command
Die merge Anweisung ist ein Befehl zum Ver-
arbeiten von Daten Die Anweisung ist im Kern
eine Kombination eines insert und update Be-
fehls.
é delete command
Die delete Anweisung ist ein Befehl zum Lö-
schen von Daten.
80
© Dipl.Ing.-Paul Panhofer Bsc.
Die insert Anweisung ist ein Befehl zum Einfügen von Der insert - select Befehl stellt eine Variation des ur-
Daten in die Datenbank. Die SQL Spezifikation unter- sprünglichen insert Befehls dar.
scheidet mehrere Formen des insert Befehls.
Zur Migration von Daten ist es möglich den insert
Befehl mit der select Anweisung zu koppeln.
8.2.1 insert Befehl
Befehl zum Einfügen von Datensätzen in die Daten- DML: insert - select command
bank. 1 -- ----------------------------------------
2 -- Syntax: insert select
DML: insert command
3 -- ----------------------------------------
1 -- ----------------------------------------
4 INSERT INTO table_name VALUES
2 -- Syntax: insert
5 (column1, column2)
3 -- ----------------------------------------
6 SELECT value1, value2
4 -- Syntax 1
7 FROM table_name;
5 INSERT INTO table_name (column1, column2, )
8
6 VALUES (value1, value2, value3, ...);
9 -- ----------------------------------------
7
10 -- Beispiel: insert - select
8 -- Syntax 2
11 -- ----------------------------------------
9 INSERT INTO table_name
12 INSERT INTO c_projects
10 VALUES (value1, value2, value3, ...);
13 VALUES (
11
14 project_description,
12 -- ----------------------------------------
15 project_title,
13 -- Beispiel: insert
16 project_id,
14 -- ----------------------------------------
17 is_fwf_sponsored,
15 INSERT INTO groups (group_id, name) VALUES
18 is_ffg_spondered
16 (1, ’1 AHIT - 2015’);
19 )
17
20 SELECT id, title, description, fwf
18 INSERT INTO subjects VALUES
21 FROM l_projects
19 (1, ’Systemtechnik - Informationssysteme’);
22 WHERE project_type = ’REQUEST_FUNDING’;
q
q
81
Informationssysteme
7 UPDATE students
8 SET last_name, = ’Dreger’,
9 first_name = ’Nikolaus’
10 WHERE student_id = 3
11
12 UPDATE employees
13 SET salary = (
14 SELECT avg(salary) FROM employees
15 )
16 WHERE department_id = 103;
17
18 UPDATE employees
19 SET salary = (
20 SELECT max(salary) FROM employees
21 )
22 WHERE department_id IN (
23 SELECT
24 )
82
© Dipl.Ing.-Paul Panhofer Bsc.
. .
83
Informationssysteme
g create user
Befehlsgruppe zum Anlegen von Benutzern.
Y revoke
Befehlsgruppe zum Zurücknehmen von Benut-
zerrechten
9.2.1 Benutzerverwaltung
84
© Dipl.Ing.-Paul Panhofer Bsc.
14 -- ----------------------------------------
15 -- Syntax: mysqladmin
16 -- ---------------------------------------- 9.3.2 Syntax: grant Befehl
17 -- Aendern des Passworts des Admins
18 mysqladmin --user=root DCL: Rechteverwaltung
19 --password=old 1 -- ----------------------------------------
20 password new 2 -- Syntax: grant
21 3 -- ----------------------------------------
22 -- ---------------------------------------- 4 -- Anatomie des grant Befehls
23 -- Syntax: drop user 5 GRANT privilege ON table_name TO user@host
24 -- ----------------------------------------
25 drop user user_name;
q
85
Informationssysteme
DCL: Rechteverwaltung
1 -- ----------------------------------------
2 -- Syntax: grant
3 -- ----------------------------------------
4 -- Tabellen fuer Datenbank erstellen
5 GRANT create ON projects.* to
6 ’htl-admin’@’localhost’;
7
8 -- Tabellen auslesen
9 GRANT select ON projects.subprojects to
10 ’htl-admin’@’localhost’;
11
16 -- ----------------------------------------
17 -- Rechte anzeigen
18 -- ----------------------------------------
19 SHOW GRANTS FOR ’htl-admin’@’localhost’;
20
21 -- ----------------------------------------
22 -- Rechte zuordnen
23 -- ----------------------------------------
24 FLUSH PRIVILEGES;
25
26 -- ----------------------------------------
27 -- Rechte zuruecknehmen
28 -- ----------------------------------------
29 REVOKE select ON projects.subprojects FROM
30 ’htl-admin’@’localhost’;
86
Informationssysteme - Theorieskriptum
.
L Informationssysteme
Informationssysteme sind Softwaresysteme zur
Verwaltung von Daten.
L |
10.1.1 Informationssysteme
Erklärung: Informationssysteme
4
PHP
5
Java
88
© Dipl.Ing.-Paul Panhofer Bsc.
PL/SQL stellt eine prozedurale Erweiterung von PlSql erfüllt eine Reihe von Aufgaben in der Anwen-
SQL dar. dungsprogrammierung.
PlSql ermöglicht es Teile der Anwendungslogik vom Auflistung: Einsatzgebiete von PL/SQL
Applikationsserver in den Datenbankserver zu ver-
lagern. 3 Datenbankfunktionalität
Erklärung: plsql Mit Plsql Funktionen kann die Sql Sprachspezi-
‚ PlSql kombiniert den SQL Befehlssatz mit Struk- fiktion um neue Funktionen erweitert werden.
turen zur Entscheidungsfindung und Schleifenkon-
strukten. Damit ist es möglich Teile der Anwen- ( Datenkonsistenz
dungslogik vom Applikatonsserver auf den Daten-
bankserver zu verlagern. Die Sicherstellung der Konsistenz des Daten-
bestandes gehört zu den grundlegenden Auf-
‚ Mit dem Verlagern von Teilen der Anwendungslogik gaben eines Informationssystems. Mit Plsql Pro-
auf den Datenbankserver kann die Verarbeitungsge- grammen kann die logische Konsistenz der
schwindigkeit einer Anwendung siginifikant gestei- Daten auf einfache Weise sichergestellt wer-
gert werden. den.
‚ Die Integration des SQL Befehlssatz in die PlSql
Sprachspezifikation erlaubt Plsql Programmen einen
Datensicherheit
einfachen Zugriff auf die Daten einer Datenbank.
Plsql kann zur Programmierung von Authorisie-
‚ Plsql wird heute in erster Line für die Program-
rungskonzepten in der Datenbank verwendet
mierung von Migrationsprozessen, dem Reporting
werden.
bzw. zur Erweiterung des SQL Befehlssatzes verwen-
det.
89
Informationssysteme
Der Zugriff auf die Daten erfolgt dann über Pls- Erklärung: pl/sql Engine
ql Prozeduren. ‚ Plsql ist eine prozedurale Programmiersprachen. Im
Gegensatz zu anderen Programmiersprachen kann
PlSql nur im Datenbankserver eingesetzt werden.
3 Datenmigration
‚ Zur Ausführung von Plsql Code verwendet der Da-
Einer der wichtigsten Anwendungsfälle von tenbankserver ein eigenes Programm, die Plsql En-
PlSQL ist die Programmierung von Daten- gine.
migrationsprozessen. Bei der Datenmigration
werden Daten aus einem Datenbanksche- ‚ Plsql Programme bestehen aus PlSql Anweisungen
ma in ein anderes Datenbankschema über- und SQL Befehlen.
tragen. ‚ Kommt es infolge der Ausführung eines PlSql Pro-
gramms zum Aufruf eines SQL Befehls wird der Be-
Anwendungsentwicklung fehl zur Ausführung an den SQL Statement Exe-
cutor weitergeleitet.
Der Fokus vieler Anwendungen liegt auf der
Datenerfassung bzw. Datenpräsentation. An- ‚ Der Aufruf des SQL Statement Executors wird als
Kontextswitch bezeichnet. Ein Kontextswitch ist
wendungen dieser Art können komplett in PlS-
QL programmiert werden. mit einem gewissen Ressourcenaufwand verbunden.
q q
90
© Dipl.Ing.-Paul Panhofer Bsc.
Codebeispiel: Variablendeklaration
Erklärung: PL/SQL Block 1 -- ----------------------------------------
‚ Der grundlegende Baustein eines PlSql Programms 2 -- Codebeispiel: Variablendeklaration
ist der PL/SQL Block. 3 -- ----------------------------------------
4 SET SERVEROUTPUT ON;
‚ Plsql Blöcke erfüllen in Plsql Programmen 2 grund-
5
legende Aufgaben:
6 DECLARE
‚ Codestrukturierung: Plsql Blöcke werden zur 7 l_first_name VARCHAR2(50) := ’Denzel’;
Strukturierung von Plsql Code verwendet. 8 l_last_name VARCHAR2(50) := ’Washington’;
‚ Programmausführung: Plsql Blöcke können von 9 l_email VARCHAR2(50) := ’d.washington’;
der Plsql Engine ausgeführt werden. 10 l_phone VARCHAR2(50) := ’0664/3234032’;
11 l_web VARCHAR2(50) := ’http://www...’;
12 l_height NUMBER := 1.76;
Syntax: Anonymer Block 13 l_weight PLS_INTEGER := 75;
1 -- ---------------------------------------- 14 l_age PLS_INTEGER := 34;
2 -- Syntax: Anonymer Block 15 BEGIN
3 -- ---------------------------------------- 16 DBMS_OUTPUT.PUT_LINE(
4 BEGIN 17 ’person data: ’
5 Executable Statements 18 || l_first_name
6 ... 19 || ’ ’
7 END; 20 || l_last_name
8 21 || ’ ’
9 -- ---------------------------------------- 22 || l_email
10 -- Codebeispiel: Block 23 || ’ ’
11 -- ---------------------------------------- 24 || l_phone
12 BEGIN 25 || ’ ’
13 DBMS_OUTPUT.PUT_LINE(’Hello World’); 26 || l_web
14 END; 27 || ’ ’
15 28 || l_height
16 BEGIN 29 || ’ ’
17 FOR counter in 1..10 LOOP 30 || l_weight
18 DBMS_OUTPUT.PUT_LINE(counter); 31 || ’ ’
19 END LOOP; 32 || l_age
20 END; 33 );
34 END;
91
Informationssysteme
92
© Dipl.Ing.-Paul Panhofer Bsc.
Plsql Blöcke können ineinander verschachtelt werden. Die Plsql Spezfikation differenziert mehrere Typen von
Plsql Blöcken.
Erklärung: Schachteln von Blöcken
Auflistung: Arten von Blöcken
‚ Bei der Verarbeitung von Daten innerhalb von
Schleifen tritt oft eine Schachtelung von Blöcken auf.
| Package Block
‚ Tritt beim Ausführen einer Schleife ein Fehler auf
Ein Package ist ein Blocktyp zur Kapselung von
wird der Schleifendurchlauf abgebrochen und die
Prozeduren, Funktionen bzw. Variablen. Ein Pls-
Plsql Engine verzweigt in den Fehlerbehandlungs-
ql Programm ist ein Verbund mehrerer Packa-
teil.
ges.
‚ Durch das Einbetten eines Blocks innerhalb einer
Schleife, führt das Auftreten eines Fehlers nicht Packages werden zur Strukturierung von Plsql
notwendigerweise zum Abbruch des Schleifendurch- Code verwendet.
laufs.
‚ In einem eingebetteten Block, kann beim Auftreten 2 Prozedur Block
eines Fehlers, der Fehler gezielt behandelt werden. Prozeduren sind Plsql Unterprogramme. Proze-
Das Programm kann anschließend mit der Schlei- duren stellen die einfachste Möglichkeit dar
fenverarbeitung fortsetzen. Plsql Code zu strukturieren.
q q
93
Informationssysteme
94
© Dipl.Ing.-Paul Panhofer Bsc.
Erklärung: Gültigkeitsbereich von Variablen Ein Qualifier ist eine logische Referenzen auf
einen Plsql Block. Der Qualifier entspricht da-
‚ Überdecken sich die Gültigkeitsbereiche zweier Va-
bei dem Namen eines Blocks.
riblen innerhalb eines Plsql Blockes, gilt die Varia-
ble, die im inneren der Blöcke definiert worden ist. Der Zugriff auf einen Qualifier erfolgt über den Na-
‚ Zur Differenzierung von Variablen mit gleichem Na- men des Plsql Blocks.
men, werden Qualifier verwendet.
Codebeispiel: Qualifier
‚ Ein Qualifier ist eine logische Referenz auf einen Pls- 1 -- ----------------------------------------
ql Block. 2 -- Qualifier
3 -- ----------------------------------------
Codebeispiel: Gültigkeitsbereich
4 PACKAGE BODY project
1 -- ----------------------------------------
5 IS
2 -- Gueltigkeitsbereich von Variablen
6 PROCEDURE init (p_type in varchar2) IS
3 -- ----------------------------------------
7 l_count PLS_INTEGER DEFAULT 0;
4 DECLARE
8 BEGIN
5 l_my_test varchar2(20) := ’Willi Mueller’;
9 DECLARE
6 BEGIN
10 l_inner NUMBER;
7 DECLARE
11 BEGIN
8 l_my_test varchar2(20);
12 SELECT count(title)
9 BEGIN
13 INTO local_block.l_inner
10 l_my_test := ’Alfred Peter’;
14 FROM projects
11 DBMS_OUTPUT.PUT_LINE(
15 WHERE project_type = p_type;
12 l_my_test
16
13 );
17 init.l_count := local_block.l_inner;
14 END;
18 END local_block;
15
19
16 DBMS_OUTPUT.PUT_LINE(
20 project.g_project_count := init.l_count;
17 l_my_test
21 END init;
18 );
22
19 END;
23 END project;
q q
95
Informationssysteme
96
© Dipl.Ing.-Paul Panhofer Bsc.
6
Char ist ein veralteter Datentyp und hat in der PlS-
q
QL Programmierung keine Bedeutung mehr.
97
Informationssysteme
. .
98
© Dipl.Ing.-Paul Panhofer Bsc.
16 dbms_output.put_line( 26 dbms_output.put_line(
17 ’name: ’ 27 || l_person_rec.id
18 || l_person_rec.first_name 28 || l_person_rec.first_name
19 || l_person_rec.last_name 29 || l_person_rec.last_name
20 ); 30 );
21 END; 31 END;
q q
99
Informationssysteme
q q
100
© Dipl.Ing.-Paul Panhofer Bsc.
Die Dimension einer Virtuelle Tabelle muß beim De- Zur Verarbeitung Virtueller Tabellen kann in Plsql Blö-
klarieren der Tabelle nicht explizit definiert werden. cken auf die select Anweisung zurückgegriffen werden.
27 END; 22 END;
q q
101
Informationssysteme
9 l_projects PROJECT_TABLE_TYPE :=
PROJECT_TABLE_TYPE();
10 BEGIN
11 SELECT p.TITLE INTO l_title
12 FROM HR.L_PROJECTS p
13 WHERE p.PROJECT_ID = 123;
14
15 SELECT l.*
16 BULK COLLECT INTO l_projects
17 FORM HR.L_PROJECTS l;
18
19 FOR i IN l_projects.first..l_projects.last
20 LOOP
21 ...
22 END LOOP;
23 END;
102
© Dipl.Ing.-Paul Panhofer Bsc.
DML Befehle können direkt in PL/SQL Programmen Die forall Anweisung erlaubt es mehrere DML Befehle
aufgerufen werden. in eine einzelne Plsql Anweisung einzubetten.
q q
103
Informationssysteme
104
© Dipl.Ing.-Paul Panhofer Bsc.
10 -- ----------------------------------------
11 -- Beispiel: IF THEN ELSE
12 -- ----------------------------------------
13 DECLARE
Trifft die Bedingung der if Anweisung zu, werden 14 l_num NUMBER := 4;
die Befehle innerhalb des if then Blocks ausgeführt. 15 BEGIN
16 IF MOD(l_num, 2) = 0 THEN
17 DBMS_OUTPUT.PUT_LINE(’number is even’);
12.2.1 IF THEN Block 18 ELSE
19 DBMS_OUTPUT.PUT_LINE(’number is odd’);
Syntax: IF THEN 20 END IF;
1 -- ---------------------------------------- 21 END;
22
2 -- Syntax: IF THEN
3 -- ---------------------------------------- 23 -- ----------------------------------------
4 IF condition THEN 24 -- Syntax: IF THEN ELSIF
5 Statement1; 25 -- ----------------------------------------
6 ... 26 IF condition THEN
7 StatementN; 27 Statement1;
8 END IF; 28 ELSIF condition2 THEN
29 Statement2;
30 ELSE
Codebeispiel: IF THEN
31 StatementN;
1 -- ---------------------------------------- 32 END IF;
2 -- Beispiel: IF THEN 33
3 -- ---------------------------------------- 34 -- ----------------------------------------
4 DECLARE 35 -- Beispiel: IF THEN ELSIF
5 l_number NUMBER := 8; 36 -- ----------------------------------------
6 l_employees_count NUMBER := 0; 37 DECLARE
7 BEGIN 38 l_country VARCHAR2(30) := &user_input;
8 39 BEGIN
9 SELECT count(employees_id) 40 IF l_country = ’Austria’ THEN
10 INTO l_employees_count 41 DBMS_OUTPUT.PUT_LINE(
11 FROM employees; 42 ’A great country: ’ || l_country
12 43 );
13 if l_employees_count THEN 44 ELSIF v_country = ’USA’ THEN
14 DBMS_OUTPUT.PUT_LINE(’Inside the if’); 45 DBMS_OUTPUT.PUT_LINE(
15 END IF; 46 ’An old country: ’ || l_country
16 47 );
17 DBMS_OUTPUT.PUT_LINE(’Outside the if’); 48 END IF;
18 49 END;
19 END;
q
105
Informationssysteme
q q
106
© Dipl.Ing.-Paul Panhofer Bsc.
q q
107
Informationssysteme
108
© Dipl.Ing.-Paul Panhofer Bsc.
109
Informationssysteme
CASE_NOT_FOUND None of the choices in the WHEN clauses of a case statement were selected -6592
and there is no ELSE clause.
COLLECTION_IS_NULL Program attempted to apply collection methods other than EXISTS to an -6531
uninitialized nested table or varray, or program attempted to assign values
to the elements of an uninitialized nested table or varray.
NO_DATA_FOUND Single row SELECT returned no rows or your program referenced a deleted 100
element in a nested table or an uninitialized element in an associative
array (index-by table).
ROWTYPE_MISMATCH The host cursor variable and Plsql cursor variable involved in an assignment 9843
have incompatible return types.
SELF_IS_NULL A program attempts to call a member method, but the instance of the 5432
object type has not been initialized.
SUBSCRIPT_BEYOND_COUNT A program referenced a nested table or varray using an index number -6533
larger than the number of elements in the collection.
SUBSCRIPT_OUTSIDE_LIMIT A program referenced a nested table or varray element using an index -6532
number that is outside the legal range (for example, -1).
SYS_INVALID_ROWID The conversion of a character string into a universal rowid failed because -1410
the character string does not represent a ROWID value.
. .
110
© Dipl.Ing.-Paul Panhofer Bsc.
Fehlerbehandlungen in Plsql Programmen erfolgen im Die forall Anweisung erlaubt es mehrere DML Anwei-
Exception Teil von plsql Blöcken. sungen gekapselt auszuführen.
Für jedes Fehlerobjekt das vom System behandelt Erklärung: Fehlerbehandlung für forall
werden soll muß ein eigener Exception Handler de- ‚ Tritt ein Fehler bei der Ausführung bei einer der
finiert werden. DML Anweisungen auf, werden die restlichen An-
weisungen trotzdem ausgeführt.
Erklärung: Exception Handler
‚ Ein Exception Handler ist für eine einzelne Klasse ‚ Die save exceptions Klausel aggregiert Fehler-
von Fehlerobjekten verantwortlich. nachrichten die bei der Ausführung des forall Befehls
auftreten.
‚ Die Plsql Spezifikation definiert gleichzeitig einen
allgemeinen Exception Handler der für die Verar- Codebeispiel: Fehlerbehandlung für forall
beitung beliebiger Fehlerobjekt verwendet werden 1 -- ----------------------------------------
kann. 2 -- Beispiel: Fehlerbehandlung fr forall
3 -- ----------------------------------------
Codebeispiel: Exception Handler
4 DECLARE
1 -- ---------------------------------------- 5 TYPE PR_TABLE_TYPE IS TABLE OF
2 -- Beispiel: Applicationexception HR.PROJECT_REPORT%ROWTYPE;
3 -- ---------------------------------------- 6
4 DECLARE 7 l_reports PR_TABLE_TYPE := PR_TABLE_TYPE();
5 -- application exception 8 BEGIN
6 INVALID_COMPANY_ID EXCEPTION; 9 SELECT l.PROJECT_ID, l.TITLE, 201
7 NEGATIVE_BALANCE EXCEPTION; 10 BULK COLLECT INTO l_reports
8 ... 11 FROM HR.L_PROJECTS l;
9 BEGIN 12
10 ... 13 FORALL i IN l_reports.START..l_reports.LAST
11 -- raise application exception 14 SAVE EXCEPTIONS
12 RAISE INVALID_COMPANY_ID; 15 INSERT INTO HR.PROJECT_REPORT VALUES
13 ... l_reports(i);
14 -- raise application exception 16 EXCEPTION
15 RAISE NEGATIVE_BALANCE; 17 WHEN BULK_ERRORS
16
18 THEN
17 EXCEPTION 19 DBMS_OUTPUT.PUT_LINE(
18 -- exception handler NO_DATA_FOUND 20 ’UPDATED ’ || SQL%ROWCOUNT || ’ rows.’
19 WHEN NO_DATA_FOUND 21 );
20 THEN 22
21 ... 23 FOR i IN 1..SQL%BULK_EXCEPTINS.COUNT
22
24 LOOP
23 -- exceptin handler NEGATIVE_BALANCE 25 DBMS_OUTPUT.PUT_LINE(
24 WHEN NEGATIVE_BALANCE 26 ’error ’ || i || ’ occurred ’
25 THEN 27 SQL%BUKL_EXCEPTIONS(i).ERROR_INDEX
26 ... 28 );
27
29
28 -- exception handler 30 DBMS_OUTPUT.PUT_LINE(
29 -- DEFAULT 31 SQLERRM(-1*
30 WHEN OTHERS SQL%BULK_EXCEPTIONS(i).ERROR_CODE)
31 THEN 32 );
32 ... 33 END LOOP;
33 END 34 END
q q
111
Informationssysteme
14 LOOP
15 -- Fetch data from cursor 3 Fetch Data
16 FETCH l_employee_cur INTO
Die Fetch Answeisung erlaubt den zeilenwei-
l_employee_rec;
sen Zugriff auf die Daten der mit dem Cursor
17 EXIT WHEN l_employee_cur%NOTFOUND;
assozierten select Anweisung.
18
19 DBMS_OUTPUT.PUT_LINE(
20 l_employee_rec.EMPLOYEE_ID ¤ Close Cursor
21 || l_employee_rec.FIRST_NAME
22 || l_employee_rec.LAST_NAME Wurden alle mit dem Cursor assozierten Da-
23 || l_employee_rec.JOB_ID ten ausgelesen kann der Cursor geschlossen
24 ); werden. Mit dem Schließen des Cursors wer-
25 END LOOP; den die mit dem Cursor assozierten Ressour-
26
cen freigegeben.
27 -- close cursor
28 CLOSE cursor_name; q
29 END;
112
© Dipl.Ing.-Paul Panhofer Bsc.
FOUND Das Attribut speichert den Wert true wenn der vorhergehende fetch Be- Boolean
fehl ein Ergebnis zurückgeliefert hat. Anderfalls wird false gespeichert
ISOPEN Mit dem Attribut wird geprüft ob der Cursor offen ist. Boolean
ROWCOUNT Gibt die Zahl der Zeilen an die durch die Datenbankoperation bearbeitet Number
worden sind.
BULK_ROWCOUNT Gibt die Zahl der Zeilen an die durch die Datenbankoperation bearbeitet Number
worden sind.
q q
113
Informationssysteme
7 BEGIN
8 UPDATE account 3 Transaktion durchführen
9 SET BALANCE = BALANCE - 100
Durch das Ausführen eines SQL Befehls wer-
10 WHERE ACCOUNT_NR = 7902;
den noch keine Änderungen der Daten in der
11
Datenbank durchgeführt. Erst durch die Aus-
12 UPDATE account
führung der Transaktion werden die Änderun-
13 SET BALANCE = BALANCE + 100
gen an den Daten permanent.
14 WHERE ACCOUNT_NR = 7499;
15
q
16 INSERT INTO account_log
17 VALUES (7902,’DEBIT’, 100);
18
19 ...
20 END;
12.6.3 Implizite Transaktionen
Analyse: Geldüberweisung Implizite Transaktionen sind Transaktionen die im-
‚ Wird Geld von einem Konto auf ein anderes Konto plizit von der PL/SQL Engine durchgeführt werden.
überwiesen, muß technisch sichergestellt sein, dass
nur dann eine Abbuchung erfolgt, wenn gleichzeitig Erklärung: Transaktionen beginnen
eine Gutschrift auf das andere Konto erfolgt ist. ‚ Für jeden ausführbaren SQl Befehl wird eine neue
‚ Jeder der 3 gegebenen Schritte darf nur dann durch- Transaktion begonnen, falls der Befehl noch keiner
geführt werden, wenn alle 3 Befehle ohne Fehler aus- Transaktion zugeordnet ist.
geführt werden konnten. ‚ Wird eine Transaktion angelegt wird ihr ein Bereich
‚ Schlägt die Ausführung eines der 3 Befehle fehl, darf des Tablespace der Datenbank zugeordnet, um die
keiner der Befehle ausgeführt werden. Änderungen der Transaktion im Fehlerfall wieder
rückgängig machen zu können.
‚ Mit der Hilfe einer Transaktion kann das gewünsch-
te Verhalten erreicht werden. ‚ Bevor ein DDL bzw. DML Befehl ausgeführt wird
werden die existierenden, impliziten Transaktionen
‚ Werden mehrere Befehle einer Transaktion zuge-
durchgeführt. Die auftretenden DDL bzw. DML Be-
ordnet, können die Befehle nur dann ausgefürt wer-
fehle werden einer neuen Transaktion zugeordnet.
den, wenn keiner der Befehle einen Fehler auslöst.
q
q
114
© Dipl.Ing.-Paul Panhofer Bsc.
27 COMMIT;
‚ Mit dem commit bzw. rollback Befehl kann der
28 -- end transaction work2
Prgrammierer nun das Transaktionamanagement
29 END;
steuern.
q q
115
Informationssysteme
11 UPDATE account
12 SET BALANCE = BALANCE + 100
13 WHERE ACCOUNT_NR = 7499;
14
15 COMMIT;
16 EXCEPTION
17 WHEN OTHERS THEN ROLLBACK; RAISE;
18 END;
savepoint ist ein DCL Befehl ist ein Befehl der an-
gibt bis zu welchem Befehl das Rollback rückgängig
gemacht werden soll.
8 UPDATE ...;
9 SAVEPOINT B;
10
11 IF conditions THEN
12 ROLLBACK TO SAVEPOINT A;
13 END IF;
14
15 ROLLBACK TO SAVEPOINT B;
16 END;
116
© Dipl.Ing.-Paul Panhofer Bsc.
. .
117
Informationssysteme
L Prozedur
Eine Prozdur ist ein PlSql Unterprogramm.
19 UPDATE projects
20 SET project_title = p_project_title,
21 project_type = p_project_type
22 WHERE project_id = p_project_id;
23
24 END update_project;
118
© Dipl.Ing.-Paul Panhofer Bsc.
q £ nominelle Parameterübergabe
Bei einer nominellen Parameterübergabe wer-
13.1.2 Prozedur mit Parametern den die gewünschten Werte explizit dem Na-
men eines Parameters zugeordnet.
Erklärung: Prozeduren mit Parametern
‚ Parameter werden nach dem Namen der Prozedur Erklärung: nominelle Parameterübergabe
als kommaseparate Liste angegeben.
‚ Werden die Parameter einer Prozedur nominell
‚ Analog zur Deklartion von Variablen wird zuerst der übergeben, muß beim Aufruf der Prozedur keine
Name des Parameters gefolgt vom Typ des Parame- Rücksicht auf die Reihenfolge der Parameter mehr
ters definiert. genommen werden.
‚ Plsql unterscheidet 3 Typen von Parametern. ‚ Beim Aufruf der Prozedur muß die Reihenfolge der
Parameter nicht mehr bekannt sein.
Auflistung: Typen von Parameter ‚ Bei einer nominellen Parameterübergabe muß je-
doch der Name des Parameters bekannt sein.
in - Parameter
Codebeispiel: Parameterübergabe
In Parameter verhalten sich innerhalb von Pro-
1 -- ----------------------------------------
zeduren wie initialisierte Konstanten. Den Pa-
2 -- Codebeispiel: Parameteruebergabe
rameteren kann in der Prozedur kein neuer
3 -- ----------------------------------------
Wert zugwiesen werden.
4 CREATE OR REPLACE
Beim Aufruf werden ihnen Werte mittels Kon- 5 PROCEDURE print_return_date (
stanten oder Variablen zugewiesen. 6 p_start_date IN DATE,
7 p_day_amount IN NUMBER
8 )
( in out - Parameter 9 AS
10 l_end_time VARCHAR2(25);
In/Out Parameter verhalten sich innerhalb von
11 BEGIN
Prozeduren wie initilaisierte Variablen. Den
12 l_end_time := to_char(
Parametern kann im Anweisungsteil der Proze-
13 next_day(
dur ein neuer Wert zugewiesen werden.
14 p_start_date + p_day_amount,
Beim Aufruf werden ihnen Werte mittels Varia- 15 ’MON’
blen übergegen. 16 ), ’DD.MM.YYYY’
17 );
18 END print_return_date;
out - Parameter 19
q q
119
Informationssysteme
q
q
120
© Dipl.Ing.-Paul Panhofer Bsc.
L Package Spezifikation
L Package
Die öffentliche Schnittstelle des Packages wird
Ein Package ist eine PlSql Block zur Kapselung
als Package Spezifikation bezeichnet.
von Prozduren, Funktionen und Variablen.
q
q
121
Informationssysteme
23 RETURN to_char(p_date_in,
‚ private Prozeduren und Funktionen: Im Packa-
l_format_mask);
ge Körper können auch Unterprogramme implemen-
24 END get_xml_date_string;
tiert werden die nicht Teil der Package Spezifikation
25
sind. Diese Unterprogramme können jedoch nur in-
26
nerhalb des Package Körpers selbst aufgerufen wer-
27 -- ----------------------------------------
den.
28 -- Prozedur: print_return_date
‚ Package Initialisierung: Im Package Körper steht
29 -- ----------------------------------------
die Möglichkeit zur Verfügung eine Initialisierung 30 PROZEDURE print_return_date(
des Packages durchzuführen. Diese Code wird nur 31 p_start_date IN date DEFAULT sysdate,
beim Lades des Packages in den Hauptspeicher aus- 32 p_day_amount IN number
geführt. 33 )
34 AS
Syntax: Package Körper 35 BEGIN
1 -- ---------------------------------------- 36 dbms_output.put_line(
2 -- Syntax: Package Koerper 37 ’Rueckgabewert ist: ’ ||
3 -- ---------------------------------------- 38 get_return_date(p_start_date,
4 CREATE OR REPLACE PACKAGE BODY pkg_name 39 p_day_amount)
5 AS 40 );
6 -- Variablen Deklarationen; 41 END print_return_date;
42
7 -- Type Deklarationen;
8 -- Implementierung der Package Elemente 43 -- ----------------------------------------
9 BEGIN 44 -- Prozedur: get_return_date
10 -- Initialisierungsteil 45 -- ----------------------------------------
11 END[pkg_name]; 46 FUNCTION get_return_date (
47 p_start_date IN date DEFAULT sysdate,
48 p_day_amount IN number
Codebeispiel: Package Körper 49 ) return date
1 -- ---------------------------------------- 50 AS
2 -- Codebeispiel: Packagekoerper 51 BEGIN
3 -- ---------------------------------------- 52 return next_day(
4 CREATE OR REPLACE PACKAGE BODY tools 53 p_start_date + p_day_amount, ’MON’
5 AS 54 );
6 PROCEDURE initialize 55 END get_return_date;
7 AS 56
8 BEGIN 57 BEGIN
9 g_std_day_amount := 24; 58 initialize();
10 END; 59 END tools;
11
12 FUNCTION get_xml_date_string (
q
13 p_date_in IN date ,
122
© Dipl.Ing.-Paul Panhofer Bsc.
18 -- Triggerart definieren
19 [FOR EACH ROW]
20
24 -- Trigger verwalten
25 [ENABLE/DISABLE]
26
27 -- Filter
28 [WHEN condition]
29
q
q
123
Informationssysteme
13 IF INSERTING THEN
14 DBMS_OUTPUT.PUT_LINE(
15 ’inserted data into projects by ’
16 || l_user
17 );
18 ELSIF UPDATING THEN
19 DBMS_OUTPUT.PUT_LINE(
20 ’updated data into projects by ’
21 || l_user
22 );
Codebeispiel: Trigger 23 END IF;
24 END;
1 -- ----------------------------------------
2 -- Codebeispiel: Log Beispiel
3 -- ---------------------------------------- q
4 CREATE TABLE project_logs (
5 log_id NUMBER(19,0) not null unique,
13.3.4 Pseudorecords
6 log VARCHAR(100) not null,
7 PRIMARY KEY (log_id)
8 ); L Kontext
9
Der Kontext ist ein Sessionchache, der durch
10 INSERT INTO projects_log (log) VALUES
die Datenbank für bestimmte Datenbanko-
(’inserted project’);
pertionen verwaltet wird.
11
12 -- ----------------------------------------
13 -- Loggen von Events Erklärung: Kontext
14 -- ---------------------------------------- ‚ Der Kontext eines Triggers, kapselt jene Daten die
15 CREATE OR REPLACE TRIGGER tr_project_log durch die DML Anweisung bearbeitet werden, die
16 AFTER INSERT ON projects den Trigger ausgelöst hat.
17 FOR EACH ROW
18 ENABLE ‚ Der Kontext beinhaltet dabei z.b.: für ein update
19 DECLARE die gegenwärtig in der Datenbank gespeicherten Da-
20 l_name VARCHAR(100); ten als auch jene Werte, durch die die gespeicherten
21 BEGIN Werte ersetzt werden sollen.
22 SELECT user INTO l_user FROM DUAL; ‚ Um auf die Werte aus dem Cache zugreifen zu kön-
23 DBMS_OUTPUT.PUT_LINE(l_user || ’entered nen wird der OLD und NEW Pseudorecord zur Verfü-
data’); gung gestellt.
24 END;
124
© Dipl.Ing.-Paul Panhofer Bsc.
q
q
125
Informationssysteme
n Idempotent
Auflistung: Restriktionen
‚ Funktionsparameter: Funktionsparameter in SQL
Funktionen dürfen keine out Parameter sein.
126
© Dipl.Ing.-Paul Panhofer Bsc.
Bei der Ausführung von SQL Funktionen dürfen keine Der SQL Befehlssatz soll um eine Funktion erweitert
Nebeneffekte auftreten. werden.
22 RETURN l_result;
Analyse: Optimizer Hints
23 EXCEPTION
‚ deterministic: Mit dem deterministic Hint garan-
24 WHEN numeric_value_exception THEN
tiert der Programmierer der SQL Engine, dass bei 25 CASE WHEN p_n < 0 or p_n is null THEN
der Ausführung der Funktion für gleiche Eingabepa- 26 RETURN null;
rameter immer das selbe Ergebnis berechnet wird.
27 END CASE;
‚ parallel_enable: Mit dem Hint teilen Sie der Da- 28 WHEN others THEN
tenbank mit, dass die Ausführung der SQL Funktion 29 raise;
parallelisiert erfolgen kann. 30 END factorial;
q q
127
Informationssysteme
. .
128
Informationssysteme - Theorieskriptum
.
NoSQL - Prinzipien
Version 1.0
Informationssysteme
L Big Data
Der Begriff Big Data beschreibt Datenbestän-
de, die aufgrund ihres Umfangs, ihrer Struktur
bzw. ihrer Schnelllebigkeit nur begrenzt oder
gar nicht mit relationalen Datenbanken verar-
beitet werden können.
L |
15.1.1 Grundlagen
Erklärung: Bigdata
01. Bigdata 130 ‚ Der enorme Datenzuwachs in Wirtschaft, For-
schung und privatem Umfeld ergibt sich aus der Di-
gitalisierung von Inhalten in digitalen Verwaltungs-
02. Verteilte Datenbanken 132
, Steuer- und Kommunikationssystemen.
03. NoSQL Datenbanken 133 ‚ In sozialen Netzwerken, der Finanzindustrie
bzw. dem Gesundheitswesen entstehen neue
Anwendungs- und Geschäftsfelder die mit großen
Datenmengen arbeiten müssen.
Auflistung: Anwendungsbeispiele
‚ Datenvolumen: Das enorme Datenvolumen das in
sozialen Netzwerken generiert werden muß über-
steigt in der Regel die Möglichkeiten relationaler Da-
tenbanken.
7
Informationssysteme
130
© Dipl.Ing.-Paul Panhofer Bsc.
Die grundlegenden technischen Herausforderungen Der Begriff Bigdata stammt aus dem englischen
im Bigdata Umfeld werden abstrahiert als die soge- Sprachraum. Erst als Phänomen bzw. Hype wahrge-
nannten 3V - Volume, Velocity und Variety. nommen, fassen IT Experten zwischenzeitlich unter
dem Begriff 2 Aspekte zusammen.
Auflistung: Herausforderungen Big Data
Auflistung: Aspekte des Bigdata
Volume ‚ Datenmenge: Der Begriff Bigdata wird verwendet
um große Datenmengen in der IT zu beschreiben.
Mit Volume ist die schiere Menge an Daten ge-
meint, die pro Zeiteinheit verarbeitet werden ‚ Technologie: Bigdata steht gleichzeitig für leis-
muss. tungsstarke IT-Lösungen und Systeme, mit denen
große Datenmengen verarbeitet werden können.
¨ Velocity
Velocity beschreibt die Geschwindigkeit, mit L NoSQL Systeme
der Daten verarbeitet werden müssen.
NoSQL Systeme sind Informationssysteme die
entwickelt wurden um den Herausforderun-
Variety gen des Bigdata zu begegnen. NoSQL ist ein
Acronym und steht für not only sql.
Variety beschreibt die unterschiedlichen Gra-
de der Strukturierung der Daten.
Erklärung: NoSql Systeme
‚ Hinter NoSQL Systemen steht nicht ein einzelnes
Technologiekonzept wie bei relationalen Datenban-
ken. Vielmehr wird mit dem Begriff NoSQL eine
Zu den Herausforderungen von Big Data zählt Vielzahl von unterschiedlichen Technologien asso-
nicht nur die Speicherung von großen Datenmengen ziert.
sondern gleichfalls die Extraktion von Wissen aus ‚ Wichtig ist hierbei, daß diese Technologien mit klas-
Daten. sischen Datenbanken in Einklang gebracht werden
können. Nur so kann die Konsistenz der Daten über
Das Ziel von Datenextraktion ist die effiziente und Systemgrenzen hinweg gewährt werden.
schnelle Analyse von Daten zu verwertbarer Informa-
tion. q
131
Informationssysteme
132
© Dipl.Ing.-Paul Panhofer Bsc.
133
Informationssysteme
CAP Theorem
Das CAP Theorem zeigt, dass in einem ver-
teilten Datenbanksystem maximal zwei der
folgenden drei Eigenschaften gleichzeitig
gewährleistet sein können.
Auflistung: Eigenschaften
Consistency
In verteilten Datenbanken, muss sichergestellt
sein, dass nach Abschluss einer Transaktion
alle Replikate eines veränderten Datensatzes
aktualisiert wurden.
r Availability
Verfügbarkeit beschreibt in erster Linie die Ei-
genschaft eines Infromationssystem bei hoher
Systemlast seinen Dienst aufrechterhalten zu
können.
Partition Tolerance
Partition Tolerance bedeutet, dass das System
auch beim Ausfall einzelner Konten als Gan-
zes weiter arbeiten kann.
134
© Dipl.Ing.-Paul Panhofer Bsc.
Mit das CAP Theorem wird eine Kategorisierung Jedes Informationssystem kann als Punkt auf ei-
von Informationssystemen definiert. ner der 3 Achsen des CAP Theorems eingetragen
werden.
Jedes Informationssystem läßt sich immer einer,
den durch das CAP Theorem beschriebenen Kate-
gorien zuordnen. L |
Analyse: Achsenausprägung
Erklärung: Kategorien von IFS
‚ Die Nähe des Eintrag zu einem der 3 Fixpunkte des
‚ Durch das CAP Theorem werden 3 Kategorien Systems, definiert die Ausprägung der Eigenschaft
für Informationssystemen definiert: CA Systeme, AP im Informationssystem.
Systeme und CP Systeme.
‚ Ausprägung Verfügbarkeit: Die Verfügbarkeit ist
‚ Jedes Informationssystem läßt sie genau einer, den hoch, wenn das System schnell antwortet, und ge-
durch das CAP Theorem definierten Kategorien zu- ring, wenn das System eine hohe Latenzzeit hat.
ordnen. Die durch das CAP Theorem definierten Ka-
tegorien werden auch als die Achsen des CAP Theo- ‚ Ausprägung Konsistenz: In Hinblick auf die Kon-
rems bezeichnet. sistenz bedeutet das, dass diese entweder sofort si-
chergestellt ist oder erst nach einem gewissen Zeit-
‚ Wird ein Informationssystem beispielsweise den fenster der Inkonsistenz.
CA Systemen zugeordnet, kann es graphisch als
Punkt auf der CA Achse visualisiert werden. ‚ Ausprägung Partition Tolerance: Ein System mit
hoher Partition Tolerance wird als Peer to Peer
‚ Die Systemeigenschaften Konsistenz, Verfügbar- System bezeichnet. Jeder der Knoten des System ar-
keit und Ausfallssicherheit sind dabei als graduelle beitet als autonome Einheit. Systeme mit niedriger
Größen zu verstehen. Durch die Visualisierung des Partition Tolerance funktioniern nur wenn alle Kno-
Informationssystems auf einer der 3 Achsen kann die ten des Systems erreichbar sind.
Stärke der Ausprägung der Systemeigenschaft für
das System angegeben werden. q
135
Informationssysteme
SQL Systeme werden zu den CA Systemen gezählt. Die wichtigste Klasse der CA Systeme sind die re-
lationalen Datenbanken.
136
© Dipl.Ing.-Paul Panhofer Bsc.
AP Systeme werden zu den sogenannten NoSQL CP Systeme werden zu den sogenannten NoSQL
Systemen gezählt. Systemen gezählt.
‚ DNS Systeme verfügen im gleichen Maße über eine ‚ NoSQL Systeme sind in der Regel als CP Systeme
hohe Ausfallstoleranz. konzipiert.
‚ Allerdings ist die Konsistenz nicht immer sofort ge- ‚ Bekannte NoSQL Datenbanken sind Google BigTa-
geben: es dauert in der Regel länger, bis ein geän- ble, Apache HBase, MongoDB, Redis, BerkleyDB.
derter DNS Eintrag an die gesamte DNS Hierarchi
q
propagiert werden kann.
137
Informationssysteme
L Konsistenzmodell
Das Konsistenzmodell einer Datenbank be-
schreibt auf welche Weise die Konsistenz der
Daten sichergestellt wird.
Erklärung: Konsistenz
‚ Kann die Konsistenz von Daten in einem Informa-
tionssystem nicht garantiert werden, verlieren die
Daten des Infromationssystems in der Regel ihren
Wert.
‚ Konsistenzmodelle beschreiben wie die Konsistenz
der Daten des Informationssystems sichergestellt
werden kann.
03. MVCC 140 Die Entscheidung für ein Konsistenzmodell ist fun-
damental für das Verhalten eines Datenbanksystems
04. Consistent Hashing 141 und für die Gestaltung seiner Architektur.
L Strict Consistency
Alle Anwender sehen immer dieselben Daten.
Alle Leseoperationen liefern den Wert, der die
letzte abgeschlossene Schreiboperation ge-
schrieben hat.
L Eventual Consistency
Anwender sehen nicht immer dieselben Da-
ten. Eine Leseoperation liefert eventuell den
zuletzt geschriebenen Wert.
138
© Dipl.Ing.-Paul Panhofer Bsc.
17.2.2 Sperren
Je nach Konsistenzmodell des Informationssystems,
Eine Sperre ermöglicht den exklusiven Zugriff eines
wird ein anderes Transaktionskonzept umgesetzt.
Prozesses auf eine Ressource. Sperren garantieren das
nur ein Prozess eine Ressource liest oder verändert,
Erklärung: Transaktionskonzepte
solange die Sperre besteht.
‚ ACID Transaktionskonzept: Strict Consistency
String Consistency Konsistenzmodelle verwenden
‚ BASE Transaktionskonzept: Eventual C.
Sperren um das ACID Transaktionsmodell umzu-
q setzen.
Analyse: Sperren
17.2.1 ACID Transaktionskonzept ‚ Die Verwendung von Sperren ist in mehrfacher Hin-
Ein Datenbanksystem ist Strong Consistent wenn das sicht problematisch.
Transaktionsmodell der Datenbank die ACID Eigen- ‚ Der Einsatz von Sperren kann in einer Datenbank
schaften erfüllt. zu langen Wartezeiten führen.
Auflistung: ACID Eigenschaften ‚ Besonders in verteilten Datenbanken mit replizier-
‚ Atomarität: Eine Transaktion wird entweder ganz ten Daten verlängert sich der Zeitraum einer Trans-
oder gar nicht durchgeführt. Transaktionen sind da- aktion beim Einsatz von Sperren, da zusätzlich ei-
mit unteilbar. Wenn eine Transaktion abgebrochen ne Sperrung aller replizierter Datensätze zu erfolgen
wird, bleibt das System unverändert. hat.
139
Informationssysteme
L Optimistic Locking
Unter Optimistic Locking versteht man eine
Sammlung von Verfahren, die die Konsistenz
von Daten sicherstellen, ohne Sperren zu ver-
wenden.
‚ Consistent Hashing
140
© Dipl.Ing.-Paul Panhofer Bsc.
141
Informationssysteme
142
© Dipl.Ing.-Paul Panhofer Bsc.
143
Informationssysteme
. .
144
Informationssysteme - Theorieskriptum
.
MongoDB
Version 2018.09.01
Informationssysteme
146
© Dipl.Ing.-Paul Panhofer Bsc.
147
Informationssysteme
q
q
148
© Dipl.Ing.-Paul Panhofer Bsc.
Designentscheidung Fragestellung
L Schemadesign L Schemafreiheit
Schemadesign beschreibt den Prozess der Schemafreiheit beschreibt die Eigenschaft ei-
Abbildung des fachlichen Modells auf das nes Informatinssystems Datensätze beim Einfü-
physikalische Modell eines Informationssys- gen bzw. Ändern keiner Strukturprüfung zu un-
tems. terziehen.
149
Informationssysteme
19.1.1 Datenkontainer
Auflistung: Datenkontainer
Database
In der Theorie versteht man unter einer Da-
tenbank einen logisch zusammenhängenden
Datenbestand. Die Datenbank ist in diesem
Sinne ein logischer Namensraum für die Col-
lecions eines Geschäftsfalls.
01. Datenkontainer 150
r Capped Collection
Eine Capped Collection ist eine Collection die
strukturell wie ein Ringbuffer aufgebaut ist. Sie
wird verwendet um große Mengen von Daten
schnell verarbeiten zu können.
n Document
MongoDB speichert Datensätze in Form von
Dokumenten gespeichert.
150
© Dipl.Ing.-Paul Panhofer Bsc.
10 db.createCollection(<name>, {
Codebeispiel: Datenbanken implizit anlegen 11 capped : <boolean>,
1 // ---------------------------------------- 12 autoIndexId : <boolean>,
2 // Datencontainer implizit anlegen 13 size : <number>,
3 // ---------------------------------------- 14 max : <number>,
4 // Mit dem <use> Befehl wird der Kontext 15 storageEngine : <document>,
5 // der angegebenen Datenbank geladen. 16 validator : <document>,
6 // Existiert die Datenbank nicht wird sie 17 validationLevel : <string>,
7 // angelegt. 18 validationAction : <string>,
8 use persons; 19 indexOptionDefaults : <document>,
9
20 viewOn : <string>,
10 // Mit dem insertOne Befehl wird ein Doku- 21 pipeline : <pipeline>,
11 // ment in eine Collection geschrieben. 22 collation : <document>,
12 // Existiert die Collection nicht wird 23 writeConcern : <document>
13 // sie implizit angelegt. 24 });
25
14 db.projects.insertOne({
26
15 type : "REQUEST_FUNDING_PROJECT"
16 }); 27 db.createCollection("projects");
q q
151
Informationssysteme
capped Optional. To create a capped collection, specify true. If you specify true, you must boolean
also set a maximum size in the size field.
autoIndexId Optional. Specify false to disable the automatic creation of an index on the _id boolean
field.
size Optional. Specify a maximum size in bytes for a capped collection. Once a cap- number
ped collection reaches its maximum size, MongoDB removes the older documents
to make space for the new documents. The size field is required for capped col-
lections and ignored for other collections.
max Optional. The maximum number of documents allowed in the capped collection. number
The size limit takes precedence over this limit. If a capped collection reaches the
size limit before it reaches the maximum number of documents, MongoDB remo-
ves old documents. If you prefer to use the max limit, ensure that the size limit,
which is required for a capped collection, is sufficient to contain the maximum
number of documents.
validator Optional. Allows users to specify validation rules or expressions for the collection. document
For more information, see Schema Validation.
validationLevel Optional. Determines how strictly MongoDB applies the validation rules to existing string
documents during an update.
validationAction Optional. Determines whether to error on invalid documents or just warn about string
the violations but allow invalid documents to be inserted.
viewOn The name of the source collection or view from which to create the view. The string
name is not the full namespace of the collection or view; i.e. does not include the
database name and implies the same database as the view to create.
pipeline An array that consists of the aggregation pipeline stage. db.createView creates array
the view by applying the specified pipeline to the viewOn collection or view.
writeConcern Optional. A document that expresses the write concern for the operation. Omit to document
use the default write concern.
Die Datenbankengine speichert Datensätze in Form ‚ BSON Dokumente speichern Daten dabei in Form
von BSON Dokumenten. von Key - Value Paaren.
152
© Dipl.Ing.-Paul Panhofer Bsc.
q
q
153
Informationssysteme
Schemafreiheit beschreibt die Eigenschaft eines Infor- Ein BSON Schema selbst ist wieder ein BSON Doku-
mationssystems, Datensätze beim Einfügen bzw. Än- ment.
dern keiner Strukturprüfung zu unterziehen. Zur Definition eines BSON Schemas gibt die Schema
Spezifikation eine Zahl von Attributen vor.
19.4.1 BSON Schema
Auflistung: Schemaattribute
In der Regel können Anwendungen Daten nur dann
‚ bsonType: Das bsonType Attribut definiert den
verarbeiten, wenn sie eine bestimmte Struktur aufwei-
Typ des Dokuments bzw. den Typ im Dokument
sen.
enthaltener Felder.
Die BSON Schema Spezifikation ist ein technischer
Standard zur Beschreibung der Struktur von BSON
‚ required: Mit dem required Attribut wird angege-
ben, welche Felder ein Dokument umbedingt enthal-
Dokumenten.
ten muss.
Erklärung: BSON Schema
‚ properties: Das properties Attribut wird verwen-
‚ Aus fachlicher Sicht macht es keinen Sinn, Ge-
det, um für die Felder des Dokuments Constraints
schäftsobjekte unreflektiert in einer Collection zu
zu definieren.
speichern.
Codebeispiel: Schemaattribute
‚ Mit einem BSON Schema kann definiert werden, wie
ein Dokument aufgebaut sein muss, um in eine Col- 1 //-----------------------------------------
lection eingetragen werden zu können. 2 // BSON Dokument
3 //-----------------------------------------
Codebeispiel: BSON Schema 4 var person = {
1 //----------------------------------------- 5 _id : ObjectId("5099803df3f4948391"),
2 // BSON Dokument 6 firstName : "Alan",
3 //----------------------------------------- 7 lastName : "Turning",
4 var project = { 8 contribs : [ "Turing machine", "test" ],
5 title : "Motorensimulation", 9 major : [ "Math" ]
6 type : "REQUEST_PROJECT", 10 }
11
7 views : 10000
8 }; 12 //-----------------------------------------
9
13 // BSON Schema
10 //----------------------------------------- 14 //-----------------------------------------
11 // BSON Schema 15 var personSchema = {
12 //----------------------------------------- 16 bsonType : "object",
13 var projectSchema = { 17 required : [ "major", "lastName" ],
14 bsonType : "object", 18 properties : {
15 required : ["title", "views"], 19 contribs : {
16 additionalProperties : true; 20 bsonType : ["string"]
17 properties : { 21 },
18 title : { 22 major : {
19 bsonType : "string", 23 enum : [ "Math", "English" ]
20 maxLength : 100 24 },
21 }, 25 lastName : {
22 views : { 26 bsonType : "string",
23 bsonType : "int", 27 maxLength : 50,
24 } 28 description: "... "
25 } 29 }
26 }; 30 }
31 }
q
q
154
© Dipl.Ing.-Paul Panhofer Bsc.
bsonType string alias Definiert den Typ des Feldes all types
enum array of values Definiert alle möglichen Werte für ein Feld. all types
exclusiveMaximum boolean If true and field is a number, maximum is an exclusive maxi- numbers
mum. Otherwise, it is an inclusive maximum.
exclusiveMinimum boolean If true and field is a number, minimum is an exclusive mini- numbers
mum. Otherwise, it is an inclusive minimum.
pattern regex string Field must match the regular expression strings
required array of strings Object’s property set must contain all the specified ele- objects
ments in the array
additionalProperties boolean or object If true, additional fields are allowed. If false, they are not. If objects
a valid JSON Schema object is specified, additional fields
must validate against the schema.
items bson type Definiert den Typ der Elemente die im Array gespeichert arrays
werden
uniqueItems boolean If true, each item in the array must be unique. Otherwise, arrays
no uniqueness constraint is enforced.
description string A string that describes the schema and has no effect. N/A
. .
155
Informationssysteme
Für in Objekte eingebettete Objekte erfolgt die Sche- Ein Aufzählungstyp ist ein Datentyp mit festge-
madefinition in rekursiver Weise. legten Wertemöglichkeiten.
q q
156
© Dipl.Ing.-Paul Panhofer Bsc.
Arrays fassen mehrere gleichartige Werte zu einer Col- Zur Definition eines Arrays von Objekten muß das
lection zusammen. items Attribut verwendet werden.
Erklärung: Arraydefinition
Codebeispiel: Arrays von Objekten
‚ Der BSON Typ eines Arrays ist array. Zur Defi- 1 //-----------------------------------------
nition eines Arrays muß zusätzlich die Art und der 2 // BSON Dokument
Aufbau der Arrayelemente angegeben werden. 3 //-----------------------------------------
‚ Im Schema wird dazu das items Attribut verwendet. 4 var project = {
5 title : "Simulationssoftware",
6 subprojects : [{
Codebeispiel: Arrayschema
7 title : "Finite Elemente"
1 //----------------------------------------- 8 isFWFFunded : true,
2 // BSON Dokument 9 isFFGFunded : false
3 //----------------------------------------- 10 }],
4 var point = { 11 fundings : [{
5 location : [3, 2, 5], 12 debitor : "TU Wien",
6 props : [ 13 amount : NumberLong(100000)
7 "value coordinate", 14 },{
8 "xyz values", 15 debitor : "Simens AG.",
9 ], 16 amount : NumberLong(250000)
10 description : "pipeline point" 17
11 }; 18 }]
12
19 };
13 //----------------------------------------- 20
14 // BSON Schema 21 //-----------------------------------------
15 //----------------------------------------- 22 // BSON Schema
16 var pointSchema = { 23 //-----------------------------------------
17 bsonType : "object", 24 var projectSchema = {
18 required : [ 25 bsonType : "object",
19 "location", "props", "dimension" 26 required : [ "title", "subprojects" ],
20 ], 27 properties : {
21 properties : { 28 subprojects : {
22 location : { 29 bsonType : "array",
23 bsonType : "array", 30 items : {
24 minItems : 1, 31 bsonType : "object",
25 maxItems : 4, 32 required : ["title"],
26 items : { 33 properties : {
27 bsonType : "int" 34 title : {
28 } 35 bsonType : "string",
29 }, 36 maxLength : 100
30 props : { 37 },
31 bsonType : "array", 38 isFwfFunded : {
32 maxItems : 3, 39 bsonType : bool
33 items : { 40 }
34 bsonType : "string" 41 }
35 } 42 }
36 } 43 }
37 } 44 }
38 }; 45 }
q q
157
Informationssysteme
q q
158
© Dipl.Ing.-Paul Panhofer Bsc.
8 personColl.insertOne({
9 birth : new Date(’Jun 23, 1912’),
10 death : new Date(’Jun 07, 1954’),
11 views : NumberLong(1250000),
12 user_name : "turing",
13 email : "alan.turing@berkley.com",
14 phone : "0664/3452372",
15 url : "http://www.htlkrema.at"
16 });
17
18 //return value
19 var returnValue = {
20 "acknowledged" : true,
21 "insertedId" : ObjectId("569525e144f63")
22 }
23
24 //-----------------------------------------
25 // Syntax: getCollectionNames()
26 //-----------------------------------------
27 //return all collections
28 db.getCollectionNames();
29
30 use school;
31 db.getCollectionNames();
32
33 //return value
34 var returnValue = ["persons", "teachers",
"students"]
35
36 //-----------------------------------------
37 // Syntax: drop()
38 //-----------------------------------------
39 db.<collectionName>.drop();
40
41 db.teachers.drop();
42 db.students.drop();
159
Informationssysteme
L |
20.1.1 find Befehl
9 //-----------------------------------------
04. Arrayoperatoren 166
10 // Beispiel: find
11 //-----------------------------------------
05. Projektion 167
12 var crsr = db.inventory.find( {
13 status: "A",
14 $or: [
15 { qty: { $lt: 30 } },
16 { item: "p" }
17 ]
18 } );
19
20 while (crsr.hasNext()){
21 printjson( crsr.next() );
22 }
160
© Dipl.Ing.-Paul Panhofer Bsc.
Das Ergebnis einer Abfrage wird als Resultset Die pretty() Methode optimiert die Darstellung
bezeichnet. Im Falle einer MongoDB Daten- von Objekten für die Ausgabe in der Konsole.
bank ist das eine Sammlung von Dokumen-
ten. Codebeispiel: pretty Methode
1 //-----------------------------------------
3 Cursor 2 // Cursormethode: pretty
3 //-----------------------------------------
Ein Cursor ist eine Referenz auf die Element ei- 4 db.students.remove();
nes Resultsets. 5
6 db.students.insertOne( {
Das Ergebnis der find() Methode ist stets ein Cur- 7 _id : ObjectId(2),
sor. 8 firstName : "Franz",
9 lastName : "Xaver",
20.2.1 Cursormethoden 10 roles : ["student" , "room manager" ]
11 } );
Zur Verarbeitung eines Resultsets stellt die MongoDB 12
Spezifkation eine Reihe von Methoden zur Verfügung. 13 var crsr = db.students.find();
14 crsr.pretty();
Codebeispiel: Cursormethoden 15
q q
161
Informationssysteme
Durch den Aufruf der sort() Methode, werden die Do- Durch die Verwendung der limit() Methode wird das
kumente eines Resultsets einer Sortierung unterzogen. Resultsets auf seine ersten n Elemente beschränkt.
Erklärung: sort Methode Ein Limit von 0 zeigt alle Datensätze an. Für nega-
tive Werte wird der Betrag berechnet.
‚ Als Parameter erwartet die Methode ein Objekt, de-
ren Attributen die Felder definieren, nach denen sor-
Codebeispiel: limit Methode
tiert werden soll.
1 //-----------------------------------------
‚ Der Wert des Attributes definiert dabei das Sortier- 2 // Cursormethode: pretty
verhalten an: (1 = aufsteigend, -1 = absteigend). 3 //-----------------------------------------
‚ Idealerweise sollte nach Feldern sortiert werden, für 4 db.points.remove();
5
die ein Index generiert wurde.
6 db.points.insertMany(
7 { x : 0, y : 1, z : 4 },
Codebeispiel: sort Methode
8 { x : 0, y : 2, z : 4 },
1 //----------------------------------------- 9 { x : 0, y : 3, z : 4 }
2 // Cursormethode: pretty 10 );
3 //----------------------------------------- 11
4 db.points.remove(); 12 var crsr = db.points.find();
5
13 crsr.limit(2);
6 db.points.insertMany( 14
7 { x : 0, y : 2, z : 4 }, 15 //-----------------------------------------
8 { x : 0, y : 3, z : 4 }, 16 // Ausgabe
9 { x : 1, y : 4, z : 4 }, 17 //-----------------------------------------
10 { x : 1, y : 5, z : 5 }, 18 { x : 0, y : 1, z : 4 },
11 { x : 1, y : 6, z : 5 }, 19 { x : 0, y : 2, z : 4 }
12 { x : 2, y : 6, z : 5 }
13 );
q
14
31 { x : 1, y : 5, z : 5 } 7 while( crsr.hasNext() ) {
32 { x : 1, y : 4, z : 4 } 8 printjson(crsr.next());
33 { x : 0, y : 3, z : 4 } 9 print(crsr.objsLeftInBatch());
34 { x : 0, y : 2, z : 4 } 10 }
q q
162
© Dipl.Ing.-Paul Panhofer Bsc.
Methode Beschreibung
cursor.map() Applies a function to each document in a cursor and collects the return values in an array.
cursor.skip() Returns a cursor that begins returning results only after passing or skipping a number of
documents.
cursor.size() Returns a count of the documents in the cursor after applying skip() and limit() methods.
cursor.count() Modifies the cursor to return the number of documents in the result set rather than the documents
themselves.
cursor.hasNext() Returns true if the cursor has documents and can be iterated.
cursor.batchSize() Controls the number of documents MongoDB will return to the client in a single network message.
Zur weiteren Verarbeitung der Elemente eines Re- Mit der skip() Methode kann der Cursor eines Result-
sultsets definiert die MongoDB Spezifikation die sets verändert werden.
forEach() Methode.
Codebeispiel: skip Methode
Codebeispiel: forEach Methode 1 //-----------------------------------------
1 //----------------------------------------- 2 // Cursormethode: skip
2 // Cursormethode: forEach 3 //-----------------------------------------
3 //----------------------------------------- 4 var crsr = db.inventory.find( {
4 db.persons.find({}).forEach(function(doc){ 5 status: "A",
5 db.persons.updateOne( 6 qty: { $lt: 30 },
6 {_id : doc._id}, 7 item: "p"
7 {$set : { 8 } );
8 email : doc.lastName; 9
q q
163
Informationssysteme
q
q
164
© Dipl.Ing.-Paul Panhofer Bsc.
Für bestimmte Abfrageformen stellt die MongoDB Zur Formulierung komplexer Abfragen erlaubt die
Spezifikation eine vereinfachte Form zur Verfügung. MongoDB Spezifkation das Schachteln logischer Aus-
drücke.
Codebeispiel: Kurzformen
Codebeispiel: Komplexe Bedingungen
1 //-----------------------------------------
1 //-----------------------------------------
2 // Fallbeispiel: Kurzformen
2 // Fallbeispiel: komplexe Bedingungen
3 //-----------------------------------------
3 //-----------------------------------------
4 // Kurzform: $eq Operator
4 db.projects.find({
5 db.projects.find({
5 $or : [
6 {type : {$eq : "REQUEST_FUNDING_PROJECT"}}
6 {
7 });
7 $and : [
8 /* ==> */
8 {type : {$eq : "FUNDING_PROJECT"}},
9 db.projects.find({
9 {isFFGSponsored : {$eq : true}}
10 {type : "REQUEST_FUNDING_PROJECT"}
10 ]
11 });
11 }, {
12
12 $and : [
13 // Kurzform: $and Operator
13 {type : {$eq : "REQUEST_PROJECT"}},
14 db.projects.find({
14 {isFWFSponsored : {$eq : true}}
15 $and : [
15 ]
16 {isFWFSponsored : true},
16 }
17 {isFFGSponsored : true}
17 ]
18 ]
18 });
19 });
19
20 /* ==> */
20 // ----------------------------------------
21 db.projects.find({
21 // Komplexe Bedingungen : embedded Object
22 {isFWFSponsored : true},
22 // ----------------------------------------
23 {isFFGSponsored : true}
23 db.subprojects.find(
24 });
24 $and : [
25
25 {theoreticalResearch : {$gte : 30}},
26 // Kurzform: Abfragebedingungen
26 {
27 db.projects.find({
27 "facility.code" : "124.339.125"
28 {review : {$gt:3}}, {review : {$lt:10}}
28 },{
29 });
29 isEUSponsored : true
30 /* ==> */
30 }
31 db.projects.find(
31 ]
32 {review : {$gt : 3, $lt : 10}}
32 );
33 );
q
q
165
Informationssysteme
8 if(this.isSmallProject ||
Codebeispiel: $all Operator
this.isEuSponsored)
9 flag = false; 1 //-----------------------------------------
10
2 // $all Operator
11 if(this.fundings.length < 2) 3 //-----------------------------------------
12 flag = flase; 4 db.projects.find({
13
5 reviews : { $all : [3,6,4] }
14 return flag; 6 });
7
15 }
16 } ); 8 db.projects.find({ reviews : 5 });
q q
166
© Dipl.Ing.-Paul Panhofer Bsc.
Arrayoperator Beschreibung
$all Der $all Operator prüft ob eine Liste von Werten in einem Array enthalten ist.
$size Der $size Operator prüft die Anzahl der Werte in einem Array.
$elemMatch Für die Prüfung von Objekten in Arrays wird der $elemMatch Operator verwendet. Ist im Array
ein Objekt gespeichert, das die formulierten Bedingungen erfüllt, wird das Dokument in die
Ergebnismenge aufgenommen.
q
q
167
Informationssysteme
21.1.1 Nebeneffekte
6 //-----------------------------------------
03. Daten löschen 177 7 // insertOne: document without _id
8 //-----------------------------------------
9 try {
10 db.products.insertOne(
11 {item:"card", qty:15}
12 );
13 } catch (e) {
14 print (e);
15 };
16
168
© Dipl.Ing.-Paul Panhofer Bsc.
169
Informationssysteme
Operator Beschreibung
$set Mit dem $set Operator werden ein oder mehrere Felder auf einen konstanten, neuen Wert gesetzt.
Felder, die noch nicht existieren, werden angelegt.
$unset Zum Löschen von Feldern wird der $unset Operator verwendet. Die Namen der zu löschenden Felder
werden als Schlüssel mit Wert 1 angegeben.
$rename Eine Umbennenung eines oder mehrerer Feder wird mit dem $rename Operator durchgeführt. Der
Schlüssel des jeweiligen Feldes im Änderungsdokument ist der Name des umzubenennenden Feldes,
der Wert der neue Name.
$inc Mithilfe des $inc Operators lassen sich numerische Felder um einen bestimmten, festen Betrag erhö-
hen bzw. erniedrigen (bei negativen Werten). Werden Felder angageben, die es zuvor nicht gab,
werden diese auf den entsprechenden Wert gesetzt.
$mul Der $mul Operator multipliziert ein numerisches Feld mit dem angegebenen Faktor.
$max Only updates the field if the specified value is greater than the existing field value.
$min Only updates the field if the specified value is greater than the existing field value.
$setOrInsert Sets the value of a field if an update results in an insert of a document. Has no effect on update
operations that modify existing documents.
$push Der $push Operator hängt an ein Array, ein weiteres Element an falls das Feld noch nicht existiert,
wird es angelegt.
$addToSet Analog zu $push fügt $addToSet einem Array einen oder mehrere Werte hinzu, allerdings nur dann,
wenn der jeweilige Wert noch nicht in dem Array enthalten ist.
$pop Der $pop Operator ist das Gegenstück zum $push bzw. $addToSett Operator. Mit ihm wird das letzte
bzw. erste Element eines Array gelöscht. Zum Löschen des letzten Elements ist eine 1 zu übergeben,
-1 löscht hingegen das erste Element.
$pullAll Der $pullAll Operator hängt an ein Array, ein weitere Elemente an falls das Feld noch nicht existiert,
wird es angelegt.
$each Modifies the $push and $addToSet operators to append multiple items for array updates.
$position Modifies the $push operator to specify the position in the array to add elements.
$slice Modifies the $push operator to limit the size of updated arrays.
. .
170
© Dipl.Ing.-Paul Panhofer Bsc.
Codebeispiel: updateMany
21.3.1 $set Operator
1 //-----------------------------------------
2 // Syntax: updateMany Der $set Operator wird verwendet um den Wert eines
3 //----------------------------------------- Attributes zu ändern.
4 db.<collection>.updateMany( Erklärung: $set Operator
5 <query criteria>,
6 <update>,
‚ Mit dem $set Operator werden ein oder mehrere
Attribute auf einen neuen, konstanten Wert gesetzt.
7 );
8 ‚ Existiert eines der angegebenen Felder nicht, wird
9 try { es zusammen mit dem neuen Wert im Dokument
10 db.restaurant.updateMany( angelegt.
11 { violations: { $gt: 4 } },
12 { $set: { "review" : true } } Codebeispiel: $set Operator
13 ); 1 //-----------------------------------------
14 } catch (e) { 2 // update Operator: $set
15 print(e); 3 //-----------------------------------------
16 } 4 db.products.insertMany([{
5 _id : 100,
6 rating : 4,
Codebeispiel: updateMany
7 tags : [ "apparel", "clothing" ]
1 //----------------------------------------- 8 }, {
2 // Beispiel: updateMany 9 _id : 101,
3 //----------------------------------------- 10 rating : 6,
4 var restaurant2 = { 11 tags : [ "apparel", "clothing" ]
5 _id : 2, 12 }
6 name : "Rock A Feller Bar", 13 ]);
7 violations : 2 14
8 }; 15 db.products.updateOne(
9
16 { _id: 100 },
10 var restaurant3 = { 17 { $set : {
11 _id : 3, 18 quantity: 500,
12 name : "Empire State Sub", 19 tags: [
13 violations : 5 20 "coats", "outerwear", "clothing"
14 }; 21 ]
15
22 }
16 db.restaurant.updateMany( 23 }
17 { violations: { $gt: 4 } }, 24 );
18 { $set: { "review" : true } } 25
19 ); 26 var product = {
20
27 _id : 100,
21 var restaurant3 = { 28 quantity : 500,
22 _id : 3, 29 rating : 4,
23 name : "Empire State Sub", 30 tags : [
24 violations : 5, 31 "coats", "outerwear", "clothing"
25 review : true 32 ]
26 }; 33 }
q q
171
Informationssysteme
21 ratings : "", 23 {
22 reorder : "" 24 alias : [ "The American Cincinnatus" ],
23 } } 25 name : {
24 ); 26 first : "george",
25 27 last : "was"
26 var product = { 28 }
27 _id : 100, 29 }
28 sku : "abc123", 30 {
29 quantity : 500, 31 alias : [ "My dearest friend" ],
30 details : { 32 name : {
31 model: "14Q2", make: "xyz" 33 first : "abigail",
32 }, 34 last : "adams"
33 tags : [ "apparel", "clothing" ] 35 }
34 } 36 }
q q
172
© Dipl.Ing.-Paul Panhofer Bsc.
Werteoperatoren werden zum Bearbeiten numeri- Mit dem $min Operator wird der Wert eines Feldes
scher Werte verwendet. auf den kleineren 2er Werte gesetzt.
q q
173
Informationssysteme
13 } 8 db.test.updateOne(
14 }; 9 { _id: 1 },
15 10 { $addToSet: { letters: [ "c", "d" ] } }
16 db.products.updateMany( 11 );
17 { sku: "abc123" }, 12
q q
174
© Dipl.Ing.-Paul Panhofer Bsc.
21.5.2 $push Operator Der push Operator definiert eine Reihe von Modi-
fikatoren um sein Verhalten zu adaptieren.
175
Informationssysteme
17 9 db.students.updateOne(
18 db.stores.updateMany( 10 { _id: 1 },
19 { }, 11 { $pop: { scores: -1 } }
20 { $pull: { 12 );
21 fruits: { 13
176
© Dipl.Ing.-Paul Panhofer Bsc.
L |
21.6.1 delete Befehl
8 //-----------------------------------------
9 // Syntax: deleteMany
10 //-----------------------------------------
11 db.<collection>.deleteMany(
12 <filter>,
13 );
14
15 //-----------------------------------------
16 // Beispiel: deleteOne, deleteMany
17 //-----------------------------------------
18 try {
19 db.orders.deleteOne( {
20 "_id" :
ObjectId("563237a41a4d68582c2509da")
21 } );
22 } catch (e) {
23 print(e);
24 }
25
26 try {
27 db.orders.deleteOne( {
28 "expiryts" : {
29 $lt: ISODate("2015-11-01T12:40:15Z")
30 }
31 } );
32 } catch (e) {
33 print(e);
34 }
177
Informationssysteme
22.1.1 Aggregatalgorithmen
Auflistung: Aggregationsalgorithmen
) Abfragemethoden
Abfragemethoden erlauben das Aggregie-
ren von Daten für die Dokumente einer Col-
01. Methoden und Verfahren 178 lection.
178
© Dipl.Ing.-Paul Panhofer Bsc.
Abfragemethoden Beschreibung
count Mit der Hilfe der count Methode wird die Anzahl der Dokumente eines Resultsets ermittelt.
distinct Mit der distinct Methode können alle unterschiedliche Werte eines Attributes in Form eines
Array ermittelt werden.
group Die group() Methode gruppiert die Daten einer Collection anhand eines Schlüssels. Für die
gruppierten Daten können nun einfache Operationen wie das Zählen oder das Aufsummieren
von Werten durchgeführt werden.
Mit Hilfe der count() Methode kann die Anzahl der 1 //-----------------------------------------
Dokumente eines Resultsets ermittelt werden.
2 // distinct() Methode
3 //-----------------------------------------
Erklärung: count() Methode 4 db.persons.insertMany([
5 { name : "Andreas", age : 21},
‚ Mit der count() Methode kann auf einfache Weise
6 { name : "Christian", age : 23}
bestimmt werden, wieviele Dokumente im Resultset
7 ]);
einer Abfrage enthalten sind.
8
9 db.persons.distinct(’name’);
Codebeispiel: count() Methode
10 > ["Andreas", "Christian"]
1 //-----------------------------------------
2 // count() Methode
3 //----------------------------------------- q
4 db.inventory.insertMany([{
5 item : "journal", 22.2.3 Abfragemethode: group()
6 qty : 25,
7 }, { Die group() Methode gruppiert die Daten einer Col-
8 item : "notebook", lection anhand eines Schlüssels. Für die gruppierten
9 qty : 50, Daten können einfache Operationen wie das Zählen
10 } bzw. das Aufsummieren von Werten durchgeführt wer-
11 ]); den.
12
Auflistung: group() Parameter
13 db.inventory.count();
14 > 2 ‚ key: Das key Attribut bestimmt die Werte nach de-
15
nen die Dokumente einer Collection gruppiert wer-
16 db.inventory.find( den sollen.
17 { gty : { $gte : 20}} ‚ reduce: Die reduce Funktion definiert in welcher
18 ).count(); Form die Dokumente einer Gruppe verarbeitet wer-
19 > 1 den sollen. Die Funktion wird für jedes Dokument
einer Gruppe aufgerufen.
q
179
Informationssysteme
‚ initial: Bevor die reduce Funktion durch die Mon- 22.3. Aggregatframework
goDB Engine ausgeführt wird, können in einem In-
itialisierungsschritt Variablen definiert und initia- Das Aggregatframework erlaubt komplexe Auswertun-
lisiert werden. gen für Dokumente in mehreren Collections.
‚ finalize: Müssen nach dem Ausführen der reduce Die Basis des Aggregatframeworks ist die Aggrega-
Methode weitere Berechnungen durchgeführt wer- tionspipeline.
den, können diese optional in Form einer Funktion
definiert werden.
22.3.1 Aggregationspipeline
180
© Dipl.Ing.-Paul Panhofer Bsc.
Das Aggregationsframework basiert auf 2 Grundprin- Zur Verarbeitung einer Aggregationspipeline stellt die
zipien: MongoDB Spezifikation die aggregate() Methode zur
Verfügung.
Prinzipien: Aggregatframework
Syntax: Methode aggregate
Pipelineverarbeitung 1 //-----------------------------------------
2 // Syntax: aggregate()
Das Herzstück des Aggregatframework ist die
3 //-----------------------------------------
Aggregationspipeline.
4 db.<collection>.aggregate(<pipeline>);
Die Pipeline legt eine Kette von Operationen, 5
q
q
181
Informationssysteme
$addFields Adds new fields to documents. Similar to $project, $addFields reshapes each document in 186
the stream; specifically, by adding new fields to output documents that contain both the
existing fields from the input documents and the newly added fields.
$bucket Categorizes incoming documents into groups, called buckets, based on a specified expres- 192
sion and bucket boundaries.
$count Returns a count of the number of documents at this stage of the aggregation pipeline. 186
$group Groups input documents by a specified identifier expression and applies the accumulator 191
expression(s), if specified, to each group. Consumes all input documents and outputs one
document per each distinct group. The output documents only contain the identifier field
and, if specified, accumulated fields.
$limit Passes the first n documents unmodified to the pipeline where n is the specified limit. For each 185
input document, outputs either one document (for the first n documents) or zero documents
(after the first n documents).
$lookup Performs a left outer join to another collection in the same database to filter in documents 188
from the “joined” collection for processing.
$match Filters the document stream to allow only matching documents to pass unmodified into the 184
next pipeline stage. $match uses standard MongoDB queries. For each input document,
outputs either one document (a match) or zero documents (no match).
$out Writes the resulting documents of the aggregation pipeline to a collection. To use the $out 185
stage, it must be the last stage in the pipeline.
$project Reshapes each document in the stream, such as by adding new fields or removing existing 186
fields. For each input document, outputs one document.
$skip Skips the first n documents where n is the specified skip number and passes the remaining 184
documents unmodified to the pipeline. For each input document, outputs either zero docu-
ments (for the first n documents) or one document (if after the first n documents).
$sort Reorders the document stream by a specified sort key. Only the order changes; the docu- 184
ments remain unmodified. For each input document, outputs one document.
$unwind Deconstructs an array field from the input documents to output a document for each ele- 185
ment. Each output document replaces the array with an element value. For each input do-
cument, outputs n documents where n is the number of array elements and can be zero for
an empty array.
. .
182
© Dipl.Ing.-Paul Panhofer Bsc.
Jede Pipelinestufe wird durch eine Pipelineoperator Folgenden Dokumente werden als Datenbasis für die
definiert. nachfolgenden Abfragen verwendet.
Auflistung: Pipelinestufen
Codebeispiel: projects Dokument
ü match Stufe 1 //-----------------------------------------
2 // Fallbeispiel: projects collection
Die match Stufe wird verwendet um die Do- 3 //-----------------------------------------
kumente im Dokumentenstrom der Pipeline zu 4 db.projects.insertMany([{
filtern. 5 _id : ObjectId("...1"),
6 title : "Produktionsplanungssysteme",
L project Stufe 7 type : "REQUEST_PROJECT",
8 state : "APPROVED",
Die project Stufe der Aggregationspipeline 9 fundings : [{
erlaubt die Manipulation von Dokumenten 10 debitorName : "SAP Microsystems",
durch das Umbenennen, Hinzufügen bzw. Ent- 11 amount : NumberLong(10000)
fernen von Attributen. 12 }
13 ],
14 reviews : [ 4,4,3,3,4 ]
® limit Stufe
15 },{
Mit dem limit Operator kann die Anzahl der 16 _id : ObjectId("...2"),
Dokumente im Dokumentenstrom der Pipeline 17 title : "Finite Elemente",
limitiert werden. 18 type : "RESEARCH_PROJECT",
19 state : "IN_APPROVEMENT",
20 fundings : [{
r group Stufe
21 debitorName : "TU Wien",
Mit dem group Operator können Auswertun- 22 amount : NumberLong(5000)
gen über alle Dokumente einer Pipelinestufe 23 }, {
hinweg, durchgeführt werden. 24 debitorName : "Oracle Systems.",
25 amount : NumberLong(15000)
26 }
3 lookup Stufe 27 ],
Mit dem lookup Operator können die Doku- 28 reviews : [ 5,5,3 ]
mente einer Pipelinestufe mit den Dokumen- 29 },{
ten anderer Collections in Relation gesetzt 30 _id : ObjectId("...3"),
werden. 31 title : "Simulatinssysteme",
32 type : "MANAGEMENT_PROJECT",
33 state : "IN_APPROVEMENT",
unwind Stufe 34 fundings : [{
Mit dem unwind Operator können Arrays in 35 debitorName : "Sun Microsystems",
Dokumenten zur späteren Verarbeitung auf- 36 amount : NumberLong(45000)
gelöst werden. 37 }, {
38 debitorName : "Oracle Systems.",
39 amount : NumberLong(15000)
out Stufe 40 }
41 ],
In der out Stufe werden die Dokumente der
42 reviews : [ 4,5,4,5,5 ]
vorhergehenden Pipelinestufe in eine Collec-
43 }
tion geschrieben.
44 ]);
q q
183
Informationssysteme
11 //-----------------------------------------
‚ Filterbedingungen werden als Query Kriterien for-
12 // Beispiel: $sort Stufe
muliert.
13 //-----------------------------------------
Syntax: $match Operator 14 db.projects.aggregate([
1 //----------------------------------------- 15 {$match:{type:"REQUEST_PROJECT"}},
2 // Syntax: $match Operator 16 { $sort :
3 //----------------------------------------- 17 { title : -1 }
4 db.<collection>.aggregate([ 18 }
5 { $match : <query criteria>} 19 ]);
6 ]);
7 q
8 //-----------------------------------------
9 // Beispiel: $match Stufe
22.4.3 Dokumente entfernen - $skip
10 //-----------------------------------------
11 db.projects.aggregate([ Der skip Operator wird verwendet um Dokumente aus
12 { $match : { dem Dokumentstrom der Pipeline zu entfernen.
13 $nor : [
14 {type: "MANAGEMENT_PROJECT"}, Syntax: $skip Operator
15 {type: "REQUEST_PROJECT" }, 1 //-----------------------------------------
16 ], 2 // Syntax: $skip Operator
17 {state : "IN_APPOINTMENT"}, 3 //-----------------------------------------
18 4 db.<collection>.aggregate([
19 } 5 { $skip : <number_of_documents> }
20 } 6 ]);
21 ]); 7
22 8 //-----------------------------------------
23 db.projects.aggregate([ 9 // Beispiel: $skip Stufe
24 { $match : { 10 //-----------------------------------------
25 {reviews : {$size : 4}} 11 db.projects.aggregate([
26 } 12 { $match : {type : "REQUEST_PROJECT"} },
27 } 13 { $skip : 1 }
28 ]); 14 ]);
q q
184
© Dipl.Ing.-Paul Panhofer Bsc.
4 db.<collection>.aggregate([ 8 //-----------------------------------------
5 { $unwind : <fieldname> } 9 // Beispiel: $limit Stufe
6 ]); 10 //-----------------------------------------
7 11 db.projects.aggregate([
8 db.projects.aggregate([ 12 { $match : {type : "REQUEST_PROJECT"} },
9 { $match : {type:"MANAGEMENT_PROJECT"}}, 13 { $limit : 5 }
10 { $unwind : "reviews" }, 14 ]);
11 { $project :
12 { title:1, type: 1, reviews : 1 }
q
13 },
14 { $out : "projectreport" }
15 ]); 22.4.6 Ergebnis abspeichern - $out
16
q q
185
Informationssysteme
186
© Dipl.Ing.-Paul Panhofer Bsc.
8 //-----------------------------------------
Erklärung: $project Operator 9 // Beispiel: $project Stufe
‚ Mit dem $project Operator kann die Struktur der 10 //-----------------------------------------
Dokumente im Dokumentenstrom der Pipeline ver- 11 db.projects.aggregate([
ändert 9 werden. 12 { $match : {type:"MANAGEMENT_PROJECT"}}
13 { $project : {
‚ Es werden dabei nur jene Daten eines Dokuments
14 //Felder projizieren
an die nächste Pipelinestufe weitergegeben, die Teil
15 title : 1,
der Projektion sind.
16 reviews : 1,
Syntax: $project Operator 17
18 //Felder umbenennen
‚ Der $project Operator erwartet ein Objekt als Pa-
19 projectType : "$type",
rameter.
20 projectState : "$state",
‚ Die Attribute des Objekts definieren dabei welche 21
Felder eines Dokuments in das Ergebnis der Pipeli- 22 //Aggregatoperatoren fuer Arrays
nestufe übernommen werden sollen. 23 maxVote : {
24 $max : "$reviews"
‚ Gleichzeitig können neue Attribute für ein Doku-
25 },
ment definiert werden.
26 minVote : {
‚ Mit dem $ Operator kann dabei auf die Attribute- 27 $min : "$reviews"
werte eines Dokuments zugegriffen werden. 28 }
29 }
30 }
31 ]);
9
Hinzufügen, Entfernen, Ändern von Attributen
187
Informationssysteme
Mit dem replaceRoot Operator kann die Struktur der Relation: left join
Dokumente im Dokumentenstrom der Pipeline geän-
dert werden. Der $lookup Operator kann verwendet wer-
den um einen left join zwischen den Doku-
Codebeispiel: $replaceRoot Operator menten 2er Collections zu definieren.
1 //-----------------------------------------
2 // Syntax: $replaceRoot Operator
Relation: subselect
3 //-----------------------------------------
4 db.<collection>.aggregate([ Der $lookup Operator kann verwendet wer-
5 { $replaceRoot : { den, um mehrere Pipelines miteinander in Re-
6 newRoot : <replacementDocument> lation zu setzen.
7 }
8 }
9 ]);
( Relation: recursive join
10 Mit dem $graphlookup Operator können Ab-
11 //----------------------------------------- fragen auf hierarchischen Strukturen durch-
12 // Beispiel: $replaceRoot Stufe geführt werden.
13 //-----------------------------------------
14 db.tweets.aggregate([ q
15 { $match : { lang : "en" } },
16 {
17 $replaceRoot : { 22.6.2 Collections verbinden - $lookup
18 newRoot : "$user"
Mit dem lookup Operator kann ein left join zwischen
19 }
den Dokumenten 2er Collections definiert werden.
20 }
21 ]);
Attribute: $lookup Operator
22
23 > Ausgabe ‚ from: Der Name der Collection deren Daten das Ziel
der Beziehung sind.
24 account : {
25 name : "Jonas Nagelmaier", ‚ localField: Der Name des Attributes der Joinbedin-
26 verified : false, gung der Dokumente der Basiscollection.
27 rating : 5,
28 state : "initialised" ‚ foreignField: Der Name des Attributes in der zu
29 } joinenden Collection.
‚ as: Ein Array das die gejointen Datensätze enthält.
q
188
© Dipl.Ing.-Paul Panhofer Bsc.
27 } 27 //-----------------------------------------
28 }, { 28 // Ergebnis: $lookup Stufe
29 _id : ObjectId(...12), 29 //-----------------------------------------
30 appliedResearch : NumberInt(40), 30 {
31 focusResearch : NumberInt(60), 31 appliedResearch : NumberInt(20),
32 project_id : ObjectId(...1), 32 focusResearch : NumberInt(80),
33 title : "Webbased Systems", 33 title : "ERP SAP",
34 facility : { 34 facility : {
35 name : "Datenbankeninstitut", 35 name : "Softwaretechnikinstitut",
36 _id : ObjectId(...45), 36 _id : ObjectId(...23)
37 } 37 },
38 }, { 38 project : {
39 _id : ObjectId(...13), 39 id : ObjectId("...1"),
40 appliedlResearch : NumberInt(80), 40 title : "Produktionsplanungssysteme",
41 focusResearch : NumberInt(10), 41 type : "REQUEST_PROJECT",
42 project_id : ObjectId(...2), 42 reviews : [
43 title : "Embedded Systems" 43 4,4,3,3,4
44 }, { 44 ],
45 _id : ObjectId(...14), 45 fundings : [{
46 appliedResearch : NumberInt(10), 46 debitorName : "..."
47 focusResearch : NumberInt(80), 47 }]
48 project_id : ObjectId(...3), 48 }
49 title : "API Design SAP" 49 }
50 ]);
q
189
Informationssysteme
190
© Dipl.Ing.-Paul Panhofer Bsc.
37 > Ausgabe
q
38 {
39 projectType : "REQUEST_FUNDING_PROJECT",
40 projectCount : 2
41 }, {
42 projectType : "RESEARCH_FUNDING_PROJECT",
43 projectCount : 2
44 }
191
Informationssysteme
groupBy expression An expression to group documents by. To specify a field path, prefix the field name with
a dollar sign $ and enclose it in quotes.
boundaries array An array of values based on the groupBy expression that specify the boundaries for each
bucket. Each adjacent pair of values acts as the inclusive lower boundary and the exclu-
sive upper boundary for the bucket. You must specify at least two boundaries.
default literal Optional. A literal that specifies the _id of an additional bucket that contains all do-
cuments whose groupBy expression result does not fall into a bucket specified by
boundaries.
output document Optional. A document that specifies the fields to include in the output documents in addi-
tion to the _id field. To specify the field to include, you must use accumulator expressions.
192
© Dipl.Ing.-Paul Panhofer Bsc.
ments. 30 db.projects.insertMany([{
31 _id : ObjectId("...2"),
32 title : "Finite Elemente Simulation",
22.9.1 $cond Operator 33 type : "RESEARCH_FUNDING_PROJECT",
34 state : "IN_APPROVEMENT",
Der $cond Operator ermöglicht die kontextbasierte 35 verified : false
Verarbeitung der Daten eines Dokuments. 36 },{
37 _id : ObjectId("...1"),
Syntax: $cond Expression
38 title : "Produktionsplanungssysteme",
1 //-----------------------------------------
39 type : "REQUEST_FUNDING_PROJECT",
2 // Syntax: $cond
40 state : "APPROVED",
3 //-----------------------------------------
41 verified : true
4 $cond : {
42 },{
5 if : <boolean-expression>,
43 _id : ObjectId("...3"),
6 then : <true-case>,
44 title : "Simulatinssysteme",
7 else : <false-case>
45 type : "MANAGEMENT_PROJECT",
8 }
46 state : "IN_APPROVEMENT",
9
47 verified : false
10 $cond : [
48 }
11 <boolean-expression>,
49 ]);
12 <true-case>, <false-case>
13 ]
q
193
Informationssysteme
Der $switch Operator erlaubt die bedingte Verarbei- Mit der Hilfe des $cmp Operators können 2 Werte mit-
tung der Daten eines Dokuments. einander verglichen werden. Das Ergebnis des Ver-
gleichs ist dabei ein Integer.
Syntax: $switch Expression
Erklärung: $cmp Operator
1 //------------------------------------------
2 // Syntax: $switch
‚ Ist der erste Wert größer als der 2te ist das Ergebnis
des Vergleichs 1.
3 //------------------------------------------
4 $switch : { ‚ Ist der erste Wert kleiner dann ist das Ergebnis des
5 branches : [ Vergleichs -1.
6 {case : <exp>, then: <exp>},
7 {case : <exp>, then: <exp>},
‚ Sind die Werte gleich ist das Ergebnis 0.
8 {case : <exp>, then: <exp>},
9 ... Codebeispiel: $cmp Expression
10 ], 1 //------------------------------------------
11 default : <exp> 2 // Beispiel: $cmp
12 } 3 //------------------------------------------
13 //------------------------------------------ 4 db.tweets.insertMany([
14 // Expression: $switch 5 { _id : 1, item : "abc1", qty: 300 }
15 //------------------------------------------ 6 { _id : 2, item : "abc2", qty: 200 }
16 db.projects.aggregate([ 7 { _id : 3, item : "xyz1", qty: 250 }
17 { 8 ]);
18 $addFields : { 9
19 projectValue : { 10 //------------------------------------------
20 $switch : { 11 // Expression: $cmp
21 branches : [{ 12 //------------------------------------------
22 case : { 13 db.tweets.aggregate([
23 $eq : [ 14 {
24 "$type", 15 $project : {
25 "REQUEST_PROJECT" 16 item : 1,
26 ] 17 cmpTo250 : {
27 }, 18 $cmp : ["$qty", 250]
28 then : 10 19 },
29 }, { 20 _id : 0
30 case : { 21 }
31 $eq : [ 22 },
32 "$type", 23 ]);
33 "RESEARCH_PROJECT" 24
34 ] 25 > Ausgabe
35 }, 26 {
36 then : 20 27 item : "abc1",
37 }], 28 cmpTo250 : 1
38 default : "nemo" 29 }, {
39 } 30 item : "abc2",
40 } 31 cmpTo250 : -1
41 } 32 }, {
42 }, { 33 item : "xyz1",
43 $out : "tweetsreport" 34 cmpTo250 : 0
44 }]); 35 }
q q
194
© Dipl.Ing.-Paul Panhofer Bsc.
q q
195
Informationssysteme
Mit dem $in Operator kann geprüft werden ob ein ein Der $map Operator wird verwendet um die Elemente
Element in einem Array enthalten ist. eines Arrays zu verarbeiten.
33 > Ausgabe
22.10.5 $filter Operator
34 { _id : ObjectId("...............1"),
35 storeLocation : "24th Street", Mit dem $filter Operator können die Elemente eines
36 bananaInStock : true Arrays nach bestimmten Kriterien gefiltert werden.
37 }, {
38 _id : ObjectId("...............2"), Codebeispiel: $filter Expression
39 storeLocation : "36th Street", 1 //------------------------------------------
40 bananaInStock : true 2 // Expression: $filter
41 },{ 3 //------------------------------------------
42 _id : ObjectId("...............4"), 4 $filter : {
43 storeLocation : "82nd Street", 5 input : <array>,
44 bananaInStock : false 6 as : <string>,
45 } 7 cond : <expression>
8 }
q
196
© Dipl.Ing.-Paul Panhofer Bsc.
7 db.projects.aggregate([ 1 //-----------------------------------------
8 { $addFields : { 2 // Expression: $reduce Operator
9 projectFunding : { 3 //-----------------------------------------
10 $max : { 4 $reduce: {
11 "$sum" : "$fundings.amount" 5 input: <array>,
12 } 6 initialValue: <expression>,
13 } 7 in: <expression>
14 } 8 }
9
15 }, {
16 $project : { 10 //-----------------------------------------
17 title : 1, projectFunding : 1 11 // Beispiel: $reduce Operator
18 } 12 //-----------------------------------------
19 }, { 13 // Fuegen Sie eine alle Elemente eines
20 $group : { 14 // Arrays zu einer einzelnen Zeichenkette
21 _id : null, 15 // zusammen.
22 maxFunding : {$max:"$projectFunding"}, 16
23 projects : { 17 // Hinweis: Der Operator definiert folgende
24 $addToSet : { 18 // Variablen
25 _id : "$_id", 19 // $value : Initialobjekt
26 funding : "$projectFunding" 20 // $this : aktuelle Element des Arrays
21
27 }
28 } 22 $reduce: {
29 } 23 input: ["Hallo ", "Welt"],
30 }, { 24 initialValue: "",
31 $project : { 25 in: {
32 projects : { 26 $concat : ["$$value", "$$this"]
33 $filter : { 27 }
34 input : "$projects", 28 }
29
35 as : "item",
36 cond : { 30 > Ausgabe : "Hallo Welt"
31
37 $eq : [
38 "$$item.funding", 32 // Berechnen Sie die Summe und das Produkt
39 "$maxFunding" 33 // der Elemente eines Arrays
40 ] 34 $reduce: {
41 } 35 input: [ 1, 2, 3, 4 ],
42 } 36 initialValue: { sum: 5 },
43 } 37 in: {
44 } 38 sum: {
45 }, { 39 $add : [ "$$value.sum", "$$this"]
46 $unwind : { 40 }
47 path : "$projects" 41 }
48 } 42 }
43
49 }
50 ]); 44 > Ausgabe
45 { sum : 15 }
q
q
197
Informationssysteme
7 item : "abc1", 18
198
© Dipl.Ing.-Paul Panhofer Bsc.
Mit dem $min bzw. $max Operatoren wird für einen be- Mit dem $sum Operator ist es möglich über die Doku-
stimmtes Attribut der maximale bzw. minimale Wert mente einer Gruppe hinweg eine Summe zu bilden.
auf Collectionebene ermittelt.
Codebeispiel: $sum Operator
Syntax: $min, $max Operator 1 //------------------------------------------
1 //------------------------------------------ 2 // Syntax: $sum Operatoren
2 // Syntax: $min, $max Operatoren 3 //------------------------------------------
3 //------------------------------------------ 4 { $sum: <expression> }
4 { $min: <expression> } 5
29 30
32 maxQuantity: 10, 33 {
33 avgQuantity: 6 34 _id : "REQUEST_PROJECT"
34 }, { 35 projectCount : 1
35 _id : "BOOK", 36 projects : [
36 minQuantity: 5, 37 "Produktionsplanungssysteme"
37 maxQuantity: 10, 38 ]
38 avgQuantity: 7 39 }, {
39 }, { 40 _id : "RESEARCH_PROJECT"
40 _id : "PC_GAME", 41 projectCount : 1
41 minQuantity: 1, 42 projects : [
42 maxQuantity: 1, 43 "Finite Elemente"
43 avgQuantity: 1 44 ]
44 } 45 }
q q
199
Informationssysteme
. .
200
Informationssysteme - Theorieskriptum
.
Datenverarbeitung
Version 1.0
Informationssysteme
Daten
Daten sind Fakten die in Datenverarbeitungs-
systemen gespeichert werden.
L Information
Als Information werden Daten bezeichnet de-
ren Bedeutung bekannt ist.
3 Wissen
Wissen bezeichnet Informationen, die mitein-
01. Datenverarbeitung 202
ander kombiniert werden können, um einen
Informationsgewinn zu erreichen.
02. Datenformate 203
z.B.: Karteisystem einer öffentlichen Bibliothek.
23.1.2 Datenverarbeitung
L Datenverarbeitung
Datenverarbeitung bezeichnet den systemati-
schen Umgang mit Daten mit dem Ziel, Infor-
mationen aus Daten zu gewinnen bzw. Daten
zu verwalten.
Erklärung: Datenverarbeitung
‚ Prozess der Datenverarbeitung: Input - Daten-
verarbeitung - Output
202
© Dipl.Ing.-Paul Panhofer Bsc.
5 @NoArgsConstructor
6 @Data
7 @ToString
23.2.1 Datensätze
8 public class Employee implements Serializable{
9
L Datensatz 10 @NonNull
Ein Datensatz ist ein Gruppe von Daten, die zu- 11 @NotNull
einander in Beziehung stehen. 12 @Size(min=2, max=50)
13 private String firstName;
14
20 @NonNull
z.B.: Dem Datensatz Person werden Informationen
21 @NotNull
über den Vornamen, Nachnamen usw. zugeordnet.
22 private String email;
23
‚ Datensätzen werden nur Daten zugeordnet, die in-
haltlich mit dem Datensatz in Beziehung stehen. 24 @NotNull
25 private Department department;
z.B.: Es macht keinen Sinn einem Personen Daten- 26
satz Informationen über den Stickstoffausstoss einer 27 }
Fabrikanlage zuzuordnen.
203
Informationssysteme
q
q
204
© Dipl.Ing.-Paul Panhofer Bsc.
Als Fallbeispiel wollen wir uns die aus einer Schulver- JSON ist ein Datenformat das in erster Linie für
waltungssoftware exportierten Daten ansehen. den Datenaustausch zwischen Anwendungen verwen-
det wird.
Beispiel: xml Dokument ‚ Json basiert auf einer Untermenge der JavaScript
Datentypen.
1 <!-- ----------------------------------- -->
2 <!-- Datenformat: xml --> ‚ Ein Json Datensatz hat dabei 2 mögliche Struktu-
3 <!-- ----------------------------------- --> ren: Name/Werte Paare bzw. einer Liste von Wer-
4 <?xml version="1.0" encoding="UTF-8"?> ten.
5 <school id="tu-rew-32345">
6 <courses>
Codebeispiel: json Format
7 <course title="3aHIT" begin="Sep.2016">
8 <student> 1 //------------------------------------------
9 <first-name>Domnik</first-name> 2 // Datenformat: JSON
10 <last-name>Hagmann</last-name> 3 //------------------------------------------
11 </student> 4 var school = {
12 <student> 5 address : {
13 <first-name>Lukas</first-name> 6 postal-code : 3540,
14 <last-name>Schandl</last-name> 7 location : "Krems a. d. Donau",
15 </student> 8 street : "Allauntalstr. 29"
16 <student> 9 country : "Austria"
17 <first-name>Lukas</first-name> 10 },
18 <last-name>Schandl</last-name> 11 courses : [{
19 </student> 12 id : "tu-rew-32345",
20 <student> 13 begin :"Sep 2016",
21 <first-name>Patrick</first-name> 14 students : [{
22 <last-name>Huber</last-name> 15 first-name : "Rene",
23 </student> 16 last-name : "Brandstetter"
24 <student> 17 }, {
25 <first-name>Patrick</first-name> 18 first-name : "Lukas",
26 <last-name>Steiner</last-name> 19 last-name :"Schandl"
27 </student> 20 }, {
28 <student> 21 first-name : "Hannes",
29 <first-name>Patrick</first-name> 22 last-name : "Ettenauer"
30 <last-name>Schwarz</last-name> 23 }, {
31 </student> 24 first-name : "Diego",
32 <student> 25 last-name : "Traxler"
33 <first-name>Daniel</first-name> 26 }, {
34 <last-name>Kalcher</last-name> 27 first-name : "Markus",
35 </student> 28 last-name : "Schwaiger"
36 <student> 29 }, {
37 <first-name>Markus</first-name> 30 first-name : "Markus",
38 <last-name>Schwaiger</last-name> 31 last-name : "Schwaiger"
39 </student> 32 }
40 </course> 33 ]
41 </courses> 34 ]
42 </school> 35 }
q q
205
Informationssysteme
. .
206
Informationssysteme - Theorieskriptum
.
Datenformate
Version 2018.09.01
Informationssysteme
L XML Datenformat
XML ist ein grundlegendes Datenformat zur
Darstellung hierarchisch strukturierter Daten.
c Datenaustauschformat
XML ist ein Datenformat zum Austausch von
01. XML Grundlagen 208
Daten zwischen Anwendungen und Software-
platformen.
02. XML Elemente 210
Neben JSON ist XML das wichtigste Datenaus-
03. XML Attribute 212 tauschformat für Informationssysteme.
Auszeichnungssprache XML
XML wurd mit der Motivation entwickelt eine
universale Auszeichnungssprache für das In-
ternet zu schaffen.
208
© Dipl.Ing.-Paul Panhofer Bsc.
209
Informationssysteme
210
© Dipl.Ing.-Paul Panhofer Bsc.
24.2.2 Aufbau eines XML Elements 24.2.3 Inhaltstypen von XML Elementen
Ein XML Element besteht immer aus einem Start- und XML Elemente können andere XML Elemente bzw.
einem Endtag. Die Bezeichnung des Elements kann da- Daten enthalten.
bei beliebig sein.
Auflistung: Inhaltstypen von Xml Elementen
Erklärung: Xml Element
‚ Beispiel: <first-name>John< /first-name> Ô unstrukturierter Inhalt
‚ Das XML Element besteht aus dem Start- Das XML Element enthält Daten in Form einer
tag <first-name> und dem dazugehörigen Endtag Zeichenkette. Der Inhaltstyp des XML Elements
</first-name>. wird als unstrukturiert eingestuft.
211
Informationssysteme
q q
212
© Dipl.Ing.-Paul Panhofer Bsc.
Codebeispiel: Wurzelelement
1 <!-- ----------------------------------- --> 24.4.4 Überlappung von XML Elementen
2 <!-- Beispieldokument --> XML Elemente dürfen sich nicht überlappen.
3 <!-- ----------------------------------- -->
4 <!-- XML Dokument mit Wurzelelement --> Codebeispiel: Überlappung von Elementen
5 <?xml version="1.0"?> 1 <!-- ----------------------------------- -->
6 <name id="1232345" nickname="Shiny John"> 2 <!-- Beispieldokument -->
7 <first>John</first> 3 <!-- ----------------------------------- -->
8 <last>Doe</last> 4 <?xml version="1.0"?>
9 </name> 5 <name id="1232345" nickname="Shiny John">
10 6 <first>John</first>
11 <!-- XML Dokument ohne Wurzelelement --> 7 <last>Loke</last>
12 <?xml version="1.0"?> 8 </name>
13 <name id="1232345’ nickname=’Shiny John"> 9
14 <first>John</first> 10
15 <middle>Fitzgerald Johansen</middle> 11 <!-- HTML folgt nicht der XML Syntax -->
16 <last>Doe</last> 12 <html>
17 </name> 13 <body>
18 <name id="5672’ nickname=’Stinky Gordan"> 14 <p>Some <strong>formatted<em>text</strong>
19 <first>Gordan</first> 15 ,but </em> no grammer no good!
20 <last>Ramsey</last> 16 </body>
21 </name> 17 </html>
q
q
213
Informationssysteme
xmlns:cr=http://www.htlkrems.ac.at/media-content/reverse/course
Präfix
Innerhalb eines Namensraums müssen die Namen ‚ Namensräume werden durch eine URI identifiziert.
von XML Elementen eindeutig sein. ‚ Jedem Element des Namensraums wird ein Bezeich-
ner vorangestellt um seine Zugehörigkeit zum Na-
Analyse: Xml Namensraum mensraum anzuzeigen.
‚ Das Konzept eines XMO Namensraumes kann mit
dem namespace von C# Klassen verglichen werden. Codebeispiel: Namensräume
1 <!-- ----------------------------------- -->
‚ Ein XML Namensraum ist ein logischer Namens-
2 <!-- Namensraum -->
raum mit dem XML Elemente einem logischen Kon-
3 <!-- ----------------------------------- -->
text zugeordnet werden können.
4 <?xml version="1.0"?>
q 5 <c:course xmlns:c="http://www.htl.at/courses">
6 <c:title>Semantic Web</c:title>
7 <c:description>
24.5.1 Namenskonflikte
8 Der Kurs Semantic Web behandelt die
Im folgenden Beispiel haben die beiden title Ele- 9 Prinzipien semistrukturierter Daten.
mente zwar denselben Namen, beschreiben aber un- 10 </c:description>
terschiedliche Konzepte. 11 <c:lecturers>
12 <l:lecturer>
Namensräume helfen XML Elemente mit gleichem
13 <l:name>
Namen aber unterschiedlicher Bedeutung zu diffe-
14 <l:title>Pirv.-Doz. Dr.</l:title>
renzieren.
15 <l:first>Steffen</l:first>
Codebeispiel: XML Dokument 16 <l:last>Staab</l:last>
1 <!-- ----------------------------------- --> 17 </l:name>
2 <!-- Namensraum --> 18 </l:lecturer>
3 <!-- ----------------------------------- --> 19 <l:lecturer>
4 <?xml version="1.0"?> 20 <l:name>
5 <course> 21 <l:first>Gerald</l:first>
6 <title>Semantic Web</title> 22 <l:last>Futschek</l:last>
7 <description>Semantic ... </description> 23 </l:name>
8 <lecturers> 24 <l:contact>
9 <name> 25 <l:email>g.futsch@tuwien.at</l:email>
10 <title>Pirv.-Doz. Dr.</title> 26 <l:phone>0650/543467</l:phone>
11 <last>Staab</last> 27 </l:contact>
12 </name> 28 </l:lecturer>
13 </lecturers> 29 </c:lecturers>
14 </course> 30 </c:course>
q q
214
© Dipl.Ing.-Paul Panhofer Bsc.
q q
215
Informationssysteme
Zur Verarbeitung von XML Daten wurde eine Reihe Der logisch Aufbau eines XML Dokuments ent-
eigener Technologien definiert. spricht einer hierarchischen Baumstruktur. Die
Baumstruktur selbst wird als Komponenten-
Auflistung: XML Technologien baum bezeichnet.
‚ XML: Die XML Spezifikation definiert ein Daten- Damit existieren für XML Dokumente immer
format zum Austausch von Daten im Internet. 2 Sichten: die strukturelle- und die logische
Sicht.
‚ XML Schema: XML Schemas werden verwendet um
die Struktur für XML Dokumente zu definieren.
Erklärung: XML Komponentenbaum
‚ XPath: Die XPath Spezifikation beschreibt eine
Sprache zur Selektion von Knoten in XML Doku- ‚ Ein XML Komponentenbaum besteht aus Knoten.
menten. ‚ Der Aufbau eines Knotenbaums entspicht dabei der
‚ XSLT: XSLT ist eine XML Sprache zur Transfor- hierarchischen Struktur der strukturellen Sicht des
mation von XML Dokumenten. zugehörigen XML Dokuments. Für die unterschied-
lichen Elemente im XML Dokument werden im Kno-
‚ XQuery: XQuery ist eine Abfragesprache für XML tenbaum eigene Knoten integriert.
Datenbanken.
q
q
216
© Dipl.Ing.-Paul Panhofer Bsc.
Jedes XML Dokument besitzt eine Darstellung als Die XML Spezifikation definiert für die logische Sicht
Komponentenbaum. von XML Daten folgende Knotentypen.
Erklärung: Komponentenknoten Auflistung: Knotentypen
‚ Jedes Element eines XML Dokuments besitzt eine
entsprechende Repräsentation als Knoten im Kno- K Wurzelknoten
tenbaum.
Der Wurzelknoten ist der primäre Knoten eines
‚ Die XML Spezifikation definiert dabei für folgende Knotenbaums. Der Wurzelknoten enthält alle
Elementtypen eigene Knotentpyen: XML Deklara- anderen Knoten des Knotenbaums.
tion, Kommentare, XML Elemente, XML Attribue.
‚ Tritt eines dieser Elemente in einem XML Dokument Elementknoten
auf wird ein Knoten des entsprechenden Typs im
Elementknoten entsprechen der logischen
Knotenbaum eingefügt.
Repräsentation eines XML Elements.
‚ Elemente die in einem XML Element eingebettet
sind werden als Kindknoten des entsprechenden Ele-
mentknotens dargestellt. ü Attributknoten
Das <class> Element besitzt im Knotenbaum eine Die in einem Element enthaltenen Daten wer-
Repräsentation als Elementknoten. Dem Element- den einem eigenen Textknoten zugeordnet.
knoten sind dabei folgende Kindknoten zugeordnet: Der Textknoten wird dem entsprechendem
Ein Elementknoten für das <code> Element zusam- Elementknoten als Kindelement zugeordnet.
men mit 2 Attributknoten für die Attribute des Ele-
ments.
| Namensraumknoten
‚ Beachten Sie das Knoten unterschiedlicher Knoten-
Der Namensraum eines Elements ist ihm als El-
typen Kindelemente eines Elementknoten sein kön-
ternknoten zugeordnet.
nen.
q q
217
Informationssysteme
L XPath - Selektion
XPath ist eine Adressierungssprache zur Aus-
wahl von Knoten in XML Dokumenten.
218
© Dipl.Ing.-Paul Panhofer Bsc.
Der grundlegende Ausdruckstyp in XPath ist der Die Position von Elementknoten in XML Dokuemten
Lokalisierungspfad.
kann durch einfache XPath Pfadausdrücke beschrieben
werden.
Erklärung: Knotenpfad
25.2.1 Vereinfachte Pfadausdrücke
‚ Für die Auswahl von Elementknoten in XML Do-
Die XPath Spezifikation erlaubt für Lokalisierungspfa- kumenten wird ein logischer Pfad ausgehend vom
de eine vereinfachte Schreibweise: die XPath Kurz- Wurzelknoten des Knotenbaums zum gewünschten
form. Elementknoten definiert.
8 XPath: /school/classes/class/student
‚ Ein Lokalisierungspfad ist eine Folge von Lokalisie-
9
rungsstufen. Lokalisierungsstufen sind voneinander
10 // Selektion: Alle <school> Elemente
durch den / Delimiter getrennt.
11 // Ergebnis: Der <school> Wurzel-
‚ Je nach Knotentyp definiert die XPath Spezifikation 12 // elementknoten
einen eigenen Operatoren für die Knotenauswahl. 13
14 XPath: /school
1 // -----------------------------------------
15
2 // XPath: Lokalisierungspfade
16 // Selektion: Alle <schule> Elemente
3 // -----------------------------------------
17 // Loesung: In den XML Daten sind keine
4 // Selektion: <student> Elemente
18 // <schule> Elemente enthalten. Die
5 // Ergebnis: Alle xstudent> Elemente
19 // Loesungsmenge ist leer.
6
20
7 XPath: /school/classes/class/student
21 XPath: /schule
q
q
219
Informationssysteme
9 // Selektion: Alle <first-name> Kindelemente Obwohl die XPath Spezifikation, Elementknoten als
10 // des Elternknotens des Kontextknotens Elternknoten ihrer Attributknoten definiert, können
11 // Lsungsobjekt: Knotenmenge Attributknoten nicht als Kindknoten eines Element-
12 XPath: ../name knotens angesprochen werden.
q
q
220
© Dipl.Ing.-Paul Panhofer Bsc.
Das Ergebnis eines XPath Ausdrucks ist ein Lö- Zur Filterung der Knoten einer Knotenmenge kön-
sungsobjekt. nen Prädikate definiert werden.
q q
221
Informationssysteme
Die XPath Spezifikation unterscheidet 2 Formen von Achsenbezeichner definieren die Richtung eines Kno-
Lokalisierungspfaden: Lokalisierungspfade in Stan- tendurchlaufs in Lokalisierungsstufen.
dardschreibweise bzw. Lokalisierungspfade in Kurz-
form.
L |
Ein Lokalisierungspfad ist eine Folge von Lokalisie-
rungsstufen. Erklärung: Achsenbezeichner
‚ Jede Lokalisierungsstufe besteht aus einem Ach-
25.5.1 Lokalisierungsstufen senbezeichner, einer Knotenabfrage und gegebenfalls
aus Prädikaten.
Eine Lokalisierungsstufe besteht aus 3 möglichen Seg-
menten.
‚ Der Achsennamen bestimmt die Richtung, in die der
Lokalisierungspfad fortgesetzt werden soll.
Syntax: Lokalisierungsstufe
1 // -----------------------------------------
‚ Das Ergebnis eines Knotendurchlaufs enthält alle
Knoten der gewählten Achse relativ zum Kontext-
2 // XPath: Syntax Lokalisierungsstufe
knoten.
3 // -----------------------------------------
4 Achse::Knotenabfrage[Pradikat1][...] Auflistung: Achsen
‚ self: Die Achse referenziert den Kontextknoten.
Auflistung: Segmente einer Lokalisierungsstufe
‚ child: Die Achse referenziert alle Kindknoten des
Achsenbezeichner Kontextknotens.
Der Achsenbezeichner definiert die Richtung ‚ parent: Die Achse referenziert den Elternknoten des
Die Angabe einer Knotenabfrage ist verpflich- ‚ preceding-silbing: Die Achse referenziert alle vor-
tend. hergehenden Geschwister des Kontextknotens.
‚ preceding: Die Achse referenziert alle vorhergehen-
q q
222
© Dipl.Ing.-Paul Panhofer Bsc.
durchlaufs aus, die einen bestimmten Namen habne. 14 // Selektion: Alle Textknoten im Knoten-
15 // durchlaufs
‚ Knotentypentests ermöglichen eine Vorauswahl al- 16 // Knotentesttyp: Knotentypentest
le Knoten des Knotendurchlaufs die eine bestimm- 17 XPath: ancestor::text()
ten Knotentpynen habne. Die XPath Spezifikation 18
definiert für Knotentypentests eine Reihe von Ope- 19 // Selektion: Alle Knoten des KD.
ratoren und Funktionen. 20 // Knotentesttyp: Knotentypentest
‚ Zur Formulierung komplexer Filterbedingungen 21 XPath: descendant::node()
können Prädikate10 für XPath Lokalisierungsstufen 22
10 q
siehe Kapitel Prädikate
223
Informationssysteme
224
© Dipl.Ing.-Paul Panhofer Bsc.
8 8 XPath: string(/project[@id=’343225’]/name)
9 // ----------------------------------------- 9 Ergebnis: ’Simulation’
10 // XPath Funktion: count 10
17 // -----------------------------------------
q
18 // XPath Funktion: concat
19 // -----------------------------------------
25.6.3 String Funktionen 20 /* xs:string concat(
21 xs:anyAtomicType* token
Auflistung: String Funktionen 22 ) */
23
‚ string(): Ermittelt die Stringdarstellung der über-
24 XPath: concat(’a’, ’b’, ’c’)
gebenen Knotenmenge.
25 Ergebnis: ’abc’
‚ concat(): Verkettet die übergebenen Zeichenket- 26
225
Informationssysteme
q
q
226
© Dipl.Ing.-Paul Panhofer Bsc.
9 Berichterstattung 13 /browser/tab[@id=’t1’]/subpage[last()]
10 </content> 14
34 </content> 37 // -----------------------------------------
35 </subpage> 38 6. Wie oft wurde <subpage> s5 vom User auf-
36 </tab> 39 gerufen
37 <histor> 40 // -----------------------------------------
38 <sub>s1</sub> 41 count(//sub[.=’s5’])
39 <sub>s3</sub> 42
40 <sub>s5</sub> 43 count(/descendant::sub[self::node()=’s5’])
41 </history>
42 </browser>
q
227
Informationssysteme
L XSLT Standard
Der XSLT Standard ist eine XML Sprache zur
Transformation und Verarbeitung von XML Do-
kumenten.
7 <xsl:template match="...">
07. Suchanfragen 239 8
9 ...
10 </xsl:template>
11
12 <xsl:template match="...">
13
14 ...
15 </xsl:template>
16
17 <xsl:template match="...">
18
19 ...
20 </xsl:template>
21
22 </xsl:stylesheet>
228
© Dipl.Ing.-Paul Panhofer Bsc.
17 <xsl:template match="greeting">
18 <html> L Kontextschritt
19 <body>
Um Knoten verarbeiten zu können müssen sie
20 <h1>
in den Knotext der XSLT Enginen geladen wer-
21 <xsl:value-of select="greeting"/>
den. Es gibt 2 Möglichkeiten um Knoten in den
22 </h1>
Kontext zu laden:
23 </body>
24 </html> ‚ Mit dem Abschluss der logischen Verarbei-
25 </xsl:template> tung wird der Wurzelknoten der XML Einga-
26 bedatei in den Kontext geladen.
27 </xsl:stylesheet>
28
‚ Durch den Aufruf der apply-templates An-
weisung können neue Knoten in den Kon-
29 <!-- ----------------------------------- -->
text geladen werden.
30 <!-- Output: greeting.html -->
31 <!-- ----------------------------------- -->
32 <html>
3 Verarbeitungsschritt
33 <body>
34 <h1>Hello, World!</h1> Für jeden Knoten im Kontext bestimmt die
35 </body> XSLT Engine eine entsprechende Templatere-
36 </html> gel, um den Knoten zu verarbeiten.
q q
229
Informationssysteme
q q
230
© Dipl.Ing.-Paul Panhofer Bsc.
33 </xsl:stylesheet>
11
Befehl q
231
Informationssysteme
30 </xsl:stylesheet>
q
q
232
© Dipl.Ing.-Paul Panhofer Bsc.
Mit der with-param Anweisung können zusätzliche In- XSLT Stylesheets können mehrere Templateregeln
formationen mit den Knoten im Kontext der XSLT En- mit demselben XSLT Suchmustern enthalten.
gine definiert werden.
Templateregeln mit dem gleichen Suchmuster sind
für die XSLT Engine nicht differenzierbar.
Erklärung: with-param Anweisung
‚ Durch das einbetten der with-param Anweisung in
Erklärung: Modaler Aufruf
<xsl:apply-templates> Elementen können zusätz-
liche Informationen mit Elementen im Knotext as- ‚ Der XSLT Prozessor unterscheidet Templateregeln
soziert werden. durch den Vergleich ihrer Suchmuster.
32 25
33 </xsl:stylesheet> 26 </xsl:stylesheet>
q q
233
Informationssysteme
234
© Dipl.Ing.-Paul Panhofer Bsc.
q
q
235
Informationssysteme
Zur Verarbeitung von Knotenmengen stellt die XSLT Mit dem <xsl:sort> Element können die Knoten einer
Spezifikation das <xsl:for-each> Element zur Verfü- Knotemenge sortiert werden.
gung.
Erklärung: Sortieren von Knotenmengen
Erklärung: Iterative Verarbeitung
‚ Das <xsl:sort> Element kann dabei als Kin-
‚ Für die iterative Verarbeitung eines node-sets delement des <xsl:apply-templates> bzw. des
stellt XSLT das <xsl:for-each> Element zur Ver- <xsl:for-each> Elements auftretten.
fügung.
‚ Um eine Knotenmenge nach mehreren Kriterien zu
‚ In jedem Iterationsschritt der Schleife wird eines sortieren, wird das <xsl:sort> Element wiederholt
der Elemente des node-sets verarbeitet. eingebettet.
‚ Das <xsl:for-each> Element ist dabei neben dem Syntax: <xsl:sort>
<xsl:apply-templates> Element die einzige Anwei- 1 <!-- ----------------------------------- -->
sung, die den Kontext des XSLT Prozessors verän- 2 <!-- Syntax: <xsl:sort> -->
dern kann. 3 <!-- ----------------------------------- -->
4 <xsl:sort
Codebeispiel: for-each Anweisung
5 select = Knotenmenge
1 <!-- ----------------------------------- -->
6 order = "ascending" | "descending"
2 <!-- XSLT: for-each Anweisung -->
7 </xsl:sort>
3 <!-- ----------------------------------- -->
8
4 <?xml version="1.0" encoding="UTF-8"?>
9 <!-- ----------------------------------- -->
5 <xsl:stylesheet version="2.0">
10 <!-- XSLT: sort Anweisung -->
6
11 <!-- ----------------------------------- -->
7 <!-- Datenformat der Ausgabe -->
12 <?xml version="1.0" encoding="UTF-8"?>
8 <xsl:output method="html"/>
13 <xsl:stylesheet version="2.0">
9
14
10 <xsl:template match="/">
15 <!-- Datenformat der Ausgabe -->
11 <cinema>
16 <xsl:output method="html"/>
12 <!-- iterative Verarbeitung -->
17
13 <xsl:for-each
18 <xsl:template match="/">
select="movies/movie">
19 <project-staff>
14 <xsl:if test="imdbRating[.
20 <xsl:for-each select="//employee">
> 8]">
21 <xsl:sort
15 <screening>
select="name/last-name"
16 <title>
order="descending"/>
17 <xsl:value-of
22 <xsl:sort
select="title"/>
select="name/first-name"
18 </title>
order="descending"/>
19 <link>
23
20 <xsl:value-of
24 <last-name>
select="@url"/>
25 <xsl:value-of
21 </link>
select="name/last-name"/>
22 </screening>
26 </last-name>
23 </xsl:if>
27 <first-name>unknown</first-name>
24 </xsl:for-each>
28 </xsl:for-each>
25 </cinema>
29 </project-staff>
26 </xsl:template>
30 </xsl:template>
27
31
28 </xsl:stylesheet>
32 </xsl:stylesheet>
q q
236
© Dipl.Ing.-Paul Panhofer Bsc.
q q
237
Informationssysteme
Teilen sich mehrere Elemente dieselben Attribute kann Die <xsl:copy-of> Anweisung kopiert die durch einen
eine gemeinsame Attributliste für die entsprechenden XPath Ausdruck definierte Knotenmenge in die Aus-
Elemente definiert werden. gabedatei.
Syntax: <xsl:copy-of>
Erklärung: attribute-set