Vorlesung Datenbanksysteme vom PL/SQL (von Oracle) Einführung Deklarationen Cursor Ablaufsteuerung Fehlerbehandlung stored program units
|
|
- Kai Kohl
- vor 5 Jahren
- Abrufe
Transkript
1 Vorlesung Datenbanksysteme vom PL/SQL (von Oracle) Einführung Deklarationen Cursor Ablaufsteuerung Fehlerbehandlung stored program units
2 PL/SQL-Programmteile in der Vorlesung Folien: Enthalten viele Programmausschnitte Programme manchmal nur auszugsweise auf den Folien wiedergegeben (immer nur die "wesentlichen" Teile). Durch das Auslassen von "unwesentlichen" Details sind die Programme auf den Folien eventuell nicht ablauffähig. PL/SQL-Sourcen: Auf der DBS-Homepage werden auch die vollständigen PL/SQL-Sourcen bereitgestellt. Diese wurden unter Oracle 10g getestet. Empfehlenswert: die PL/SQL Sourcen ablaufen lassen und mit Modifikationen experimentieren. 2
3 Einführung Prozedurale DB-Programmiersprachen Beispiel Struktur eines PL/SQL-Blocks SQL innerhalb von PL/SQL Ausführung von PL/SQL in SQL*PLUS PL/SQL-Quellen
4 SQL vs. prozedurale Sprachen SQL: "Deklarative" Programmiersprache: Man sagt dem DB- System, was man will und nicht wie man es will. Vorteil: Möglichkeiten der Anfrageoptimierung durch das DB-System Nachteil: manchmal wären typische Sprachkonstrukte zur Ablaufsteuerung wünschenswert (weil ausdrucksstärker). Prozedurale DB-Programmiersprachen: Fast alle DB-Systeme bieten eine (proprietäre) prozedurale Programmiersprache an. Proprietäre Sprache von Oracle: PL/SQL (Procedural Language/Structured Query Language) 4
5 Vorteile einer prozeduralen DB-Programmiersprache (1) Enge Anbindung an SQL: In SQL: Verwendung von stored functions In PL/SQL: DB-Zugriff mittels SQL Performance: durch Ausführung des Programms in der DB. 5
6 Vorteile einer prozeduralen DB-Programmiersprache (2) Portabilität: PL/SQL ist plattform-unabhängig. Sicherheitsaspekte: Stored program units werden in der DB selbst gespeichert. Stored program units bieten zusätzliche Möglichkeiten bezüglich Zugriffskontrolle. Mit Hilfe von Triggern lassen sich wesentlich komplexere Bedingungen definieren als mittels Constraints. Aufbau von Programm-Bibliotheken insbesondere: zahlreiche nützliche Packages von Oracle. Objekt-Relationale Erweiterungen: Methoden mittels PL/SQL programmieren 6
7 Beispiel SET SERVEROUTPUT ON -- suche StudentIn mit vorgegebener Matrikelnummer DECLARE l_matrnr NUMBER(10) := 26120; l_name VARCHAR2(30); l_semester NUMBER(2); BEGIN SELECT s.name, s.semester INTO l_name, l_semester FROM Studenten s WHERE s.matrnr = l_matrnr; dbms_output.put_line('name: ' l_name ', Semester: ' l_semester); EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line('leider nichts gefunden!'); END; / 7
8 Output Bemerkung zu den verwendeten Dateien: PLSQL-Intro1.sql: enthält das PL/SQL-Programm der vorigen Seite. PLSQL-Intro2.sql: gleiches Programm, aber mit l_matrnr := SQL*PLUS-Session: SQL> start c:\plsql\einfuehrung\plsql-intro1.sql Name: Fichte, Semester: 10 PL/SQL-Prozedur erfolgreich abgeschlossen. SQL> start c:\plsql\einfuehrung\plsql-intro2.sql Leider nichts gefunden! PL/SQL-Prozedur erfolgreich abgeschlossen. 8
9 Aufbau eines PL/SQL-Blocks (1) 3 Teile ("Sections"): DECLARE Section (optional): Variablen-, Typen- und Cursor-Deklarationen BEGIN Section: Enthält die eigentliche Programmlogik, z.b.: Zugriff auf die DB, Wertzuweisungen, Schleifen, Verzweigungen, etc. EXCEPTION Section (optional): Fehlerbehandlung (die Ausführung eines PL/SQL-Blocks gilt auch dann als erfolgreich, wenn ein Fehlerzweig durchlaufen wurde). 9
10 Aufbau eines PL/SQL-Blocks (2) Lebensdauer der deklarierten Objekte: Nur während der Ausführung des PL/SQL-Blocks Kleinstmöglicher PL/SQL-Block: BEGIN -- mindestens 1 Statement, z.b.: NULL; END; Kommentare: restliche Zeile auskommentieren: -- kommentar Oder /* kommentar */ 10
11 Aufbau eines PL/SQL-Blocks (3) Schachtelung von PL/SQL-Blöcken: PL/SQL-Blöcke können "beliebig" geschachtelt werden. Der innere Block ist einfach ein Teil der BEGIN-Section. Interessante Anwendung: innerer Block inkl. Exception- Section kann analog zu einem "try catch" Block in Java verwendet werden. 11
12 SQL innerhalb von PL/SQL Erlaubt: SELECT-INTO (darf nur 1 Zeile liefern) SELECT: mittels Cursor DML-Kommandos ("data manipulation language"), d.h.: INSERT, UPDATE, DELETE Transaction Control: COMMIT, SAVEPOINT, ROLLBACK Nicht erlaubt: DDL-Kommandos ("data definition language"), z.b.: CREATE TABLE, CREATE VIEW, DROP TABLE, etc. 12
13 Ausführung von PL/SQL in SQL*PLUS Voraussetzung für Bildschirmausgabe: SET SERVEROUTPUT ON PL/SQL-Block mit / abschließen erst dann wird der PL/SQL-Block ausgeführt ansonsten wartet SQL*PLUS einfach auf weitere Eingaben Datei einlesen: start <dateiname> 13
14 PL/SQL-Quellen Oracle: User's Guide and Reference /appdev.102/b14261/toc.htm PL/SQL-Tutorial (englisch) PL/SQL-Tutorial (deutsch) 14
15 Deklarationen Variablen-Deklaration Einfache Datentypen Zusammengesetzte Datentypen Wertzuweisung / Ausdrücke
16 Variablen-Deklaration Verpflichtend: Variablen-Name, Variablen-Typ Optional: Initial-Wert, CONSTANT, NOT NULL Variablen ohne Inital-Wert: sind bei Programmbeginn NULL DECLARE l_matrnr NUMBER(10) := 26120; l_name VARCHAR2(30); l_gdat DATE NOT NULL := SYSDATE; l_plz CONSTANT VARCHAR2(4):= '1040'; BEGIN dbms_output.put_line(l_matrnr ' ' l_name); dbms_output.put_line(l_gdat ' ' l_plz); END; / 16
17 Einfache Typen in PL/SQL Im wesentlichen wie in SQL, z.b.: CHAR, CHAR(n) VARCHAR2 (n) NUMBER, NUMBER (s), NUMBER (s,p) DATE Zustätzliche Datentypen: BOOLEAN BINARY_INTEGER, PLS_INTEGER BINARY_FLOAT, BINARY_DOUBLE 17
18 Zusammengesetzte Typen in PL/SQL (1) RECORD Typ: Mehrere Felder (wie Spalten einer Zeile) Zugriff: mittels Punkt-Notation DECLARE TYPE StudentenTyp IS RECORD ( MatrNr NUMBER, Name VARCHAR(30) ); l_student StudentenTyp; BEGIN SELECT s.matrnr, s.name INTO l_student FROM Studenten s WHERE s.matrnr = 24002; dbms_output.put_line(l_student.name ); END; 18
19 Zusammengesetzte Typen in PL/SQL (2) TABLE Typ: Elemente desselben Typs; wie Arrays variabler Länge Optional: Index Zugriff: mittels Position (startet bei 1) DECLARE TYPE StudTabTyp IS TABLE OF StudentenTyp INDEX BY PLS_INTEGER; l_stud_tab StudTabTyp; BEGIN SELECT s.matrnr, s.name INTO l_stud_tab(5) FROM Studenten s WHERE s.matrnr = 24002; END; 19
20 Import von Typen einer Tabelle PL/SQL-Attribute: %TYPE: importiert den Typ einer Spalte %ROWTYPE: importiert den Typ der ganzen Zeile (Zugriff auf die Komponenten mittels Punkt-Notation) DECLARE l_matrnr Studenten.MatrNr%TYPE; l_student Studenten%ROWTYPE; BEGIN SELECT s.matrnr INTO l_matrnr FROM WHERE ; SELECT * INTO l_student FROM WHERE ; dbms_output.put_line(l_matrnr); dbms_output.put_line(l_student.name); END; / 20
21 Host Variablen Idee: Manchmal möchte man Variablen-Werte aus der "Umgebung" innerhalb eines PL/SQL-Programms verwenden, z.b.: Variablen der SQL*PLUS-Session Embedded SQL (z.b. SQLJ): Variablen der Programmiersprache, in die SQL eingebettet ist (z.b. Java). Lösung in PL/SQL: Host Variablen (= "bind variables") Zugriff: Mittels ":"-Notation 21
22 Host Variablen: Beispiel variable matrikelnr NUMBER -- SQL*PLUS: ";" nicht nötig BEGIN :matrikelnr := 24002; END; / print matrikelnr DECLARE l_name Studenten.Name%TYPE; BEGIN SELECT s.name INTO l_name FROM Studenten s WHERE s.matrnr = :matrikelnr; END; / 22
23 Wertzuweisung / Ausdrücke Zuweisungsoperator: ":=" Ausdrücke verwenden folgende Operatoren Arithmetische Operatoren: +, -, *, / Vergleichsoperatoren: =, >, <, >=, <=, ungleich: <>, ^=,!= Logische Operatoren: AND, OR, NOT String-Vergleiche: LIKE, NOT LIKE, wildcards: %, _ String-Operationen: -- string concatenation Weitere SQL-Operationen: IS NULL, IS NOT NULL, x BETWEEN a AND b, x IN (1,2,3) 23
24 Cursor Idee Verwendung eines Cursors CURSOR FOR loop Schreibzugriff mittels Cursor Cursor mit Parametern
25 Idee DB-Anfragen mittels SQL sind in PL/SQL-Block erlaubt, aber: Anfrage-Ergebnis muss mittels INTO einer Variable zugewiesen werden. Diese Variable kann nur 1 Wert (bei einfachem Typ) bzw. 1 Zeile (bei zusammengesetztem Typ) aufnehmen. Lösung, um Ergebnisse mit mehreren Zeilen zu bearbeiten: Cursor: erlaubt das Durchlaufen des SELECT-Ergebnisses (so dass jeweils auf die aktuelle Zeile zugegriffen wird). Man kann mittels Cursor auf den aktuellen Datensatz auch schreibend zugreifen (was bei der Deklaration des Cursors angegeben werden muss). 25
26 Beispiel SET SERVEROUTPUT ON -- Ausgabe aller StudentInnenen am Bildschirm DECLARE CURSOR c_student IS SELECT * FROM Studenten s; rec_student Studenten%ROWTYPE; BEGIN OPEN c_student; LOOP FETCH c_student INTO rec_student; EXIT WHEN c_student%notfound; DBMS_OUTPUT.PUT('Name: ' rec_student.name ', '); DBMS_OUTPUT.PUT_LINE('Semester: ' rec_student.semester); END LOOP; CLOSE c_student; END; / 26
27 Verwendung eines Cursors Deklaration: CURSOR cursor_name IS SELECT FROM ; Record-Variable, in die jeweils eine Zeile des SELECT- Ergebnisses geschrieben werden kann. Ausführungsteil: OPEN: Beim Abarbeiten des OPEN-Befehls wird das SELECT-Statement ausgewertet. FETCH: Einlesen des ersten bzw. des nächsten Datensatzes CLOSE: Schließen des Cursors (damit werden die Ressourcen dieses Cursors wieder frei gegeben). Typisches Schleifen-Konstrukt: "Basic loop": LOOP END LOOP; Abbruchbedingung: EXIT WHEN cursor_name%notfound; 27
28 Beispiel DECLARE CURSOR c_student IS SELECT s.name, v.titel, p.note FROM Studenten s, Vorlesungen v, Pruefen p WHERE s.matrnr = p.matrnr AND v.vorlnr = p.vorlnr; TYPE type_student IS RECORD ( sname Studenten.Name%TYPE, vtitel Vorlesungen.Titel%TYPE, pnote Pruefen.Note%TYPE ); rec_student type_student; BEGIN OPEN c_student; LOOP FETCH c_student INTO rec_student; END LOOP; CLOSE c_student; END; / 28
29 Vordefinierte Cursor-Attribute %FOUND: TRUE, falls der letzte FETCH einen Satz gefunden hat. %NOTFOUND: FALSE, falls der letzte FETCH einen Satz gefunden hat. %ROWCOUNT: Liefert die Anzahl der bisher mit FETCH gelesenen Zeilen %ISOPEN: Liefert TRUE, falls der Cursor geöffnet ist. Bemerkung: Falls der Cursor nicht geöffnet ist (vor dem OPEN, nach dem CLOSE) führt der Zugriff auf die Attribute %FOUND, %NOTFOUND und %ROWCOUNT zu einer Exception. 29
30 CURSOR FOR loop "übliche" Cursor-Verwendung: FOR-loop, die bei %NOTFOUND abbricht Vereinfachte Schreibweise mittels CURSOR FOR loop: FOR rec_name IN cursor_name LOOP END LOOP; "Ersparnis": RECORD-Variable muss nicht deklariert werden (die Deklaration steckt implizit in der CURSOR FOR loop). OPEN, FETCH, CLOSE, EXIT fallen ebenfalls weg. 30
31 Beispiel SET SERVEROUTPUT ON -- Ausgabe aller StudentInnenen am Bildschirm DECLARE CURSOR c_student IS SELECT * FROM Studenten s; -- rec_student Studenten%ROWTYPE; BEGIN -- OPEN c_student; FOR rec_student IN c_student LOOP -- FETCH c_student INTO rec_student; -- EXIT WHEN c_student%notfound; DBMS_OUTPUT.PUT('Name: ' rec_student.name); DBMS_OUTPUT.PUT_LINE(', Semester: ' rec_student.semester); END LOOP; -- CLOSE c_student; END; / 31
32 Schreibzugriff mittels CURSOR Idee: Beim Verarbeiten des aktuellen Datensatzes eines Cursors erfordert die Programm-Logik eventuell, dass dieser Datensatz modifiziert oder gelöscht werden soll. Lösung: Der Cursor muss als "FOR UPDATE" deklariert werden Im UPDATE- oder DELETE-Kommando kann man auf den aktuellen Datensatz zugreifen mittels WHERE CURRENT OF cursor_name zusätzliche (optionale) Angaben bei der Deklaration: Die Spalte, auf die geschrieben werden soll => kleinere Sperre bei Mehrbenutzer-Betrieb Verhalten des PL/SQL-Blocks, falls schreibender Zugriff nicht möglich ist (d.h.: Warten oder Exception). 32
33 Beispiel -- Verbesserung der Pruefungsnoten DECLARE CURSOR c_pruefen IS SELECT * FROM Pruefen p FOR UPDATE /* optional: OF p.note NOWAIT */; BEGIN FOR rec_pruefen IN c_pruefen LOOP IF rec_pruefen.note = 5 THEN DELETE FROM Pruefen WHERE CURRENT OF c_pruefen; ELSIF rec_pruefen.note > 1 THEN UPDATE Pruefen SET Note = Note - 1 WHERE CURRENT OF c_pruefen; END IF; END LOOP; END; 33
34 Cursor mit Parametern: Beispiel SET SERVEROUTPUT ON DECLARE CURSOR c_student (l_sem NUMBER) IS SELECT * FROM Studenten s WHERE s.semester = l_sem; rec_student Studenten%ROWTYPE; BEGIN OPEN c_student (2); -- verarbeite alle Studenten im 2. Semester CLOSE c_student; OPEN c_student (6); -- verarbeite alle Studenten im 6. Semester CLOSE c_student; END; / 34
35 Ablaufsteuerung IF-Statement CASE-Statement basic LOOP while LOOP for LOOP
36 IF-Statement (1) Syntax: IF <bedingung> THEN ELSIF <bedingung> THEN ELSE END IF; Bemerkung: 0 oder beliebig viele ELSIF-Teile ELSE-Teil ist optional. 36
37 IF-Statement (2) Beispiel: (Umrechnung nach Euro) IF waehrung = 'ATS' THEN euro := x / ; ELSIF waehrung = 'BEF' THEN euro := x / ; ELSIF waehrung = 'DEM' THEN euro := x / ; ELSIF waehrung = 'ESP' THEN euro_:= x / ; ELSIF waehrung = 'FIN' THEN euro := x / ; ELSIF waehrung = 'FRF' THEN euro := x / ; ELSIF waehrung = 'GRD' THEN euro := x / ; ELSIF waehrung = 'PTE' THEN euro := x / ; ELSE DBMS_OUTPUT.PUT_LINE('unbekannte Waehrung: ' waehrung); END IF; 37
38 CASE-Statement (mit Selektor) (1) Syntax: CASE <selector> WHEN <wert1> ; WHEN <wert2> ; ELSE END CASE; Bemerkung: 1 oder beliebig viele WHEN-Teile ELSE-Teil ist optional. Fehler, wenn kein WHEN-Zweig ausgeführt wird und es auch keinen ELSE-Zweig gibt. 38
39 CASE-Statement (mit Selektor) (2) Beispiel: (Umrechnung von Euro) CASE waehrung WHEN 'ATS' THEN betrag := euro * ; WHEN 'BEF' THEN betrag := euro * ; WHEN 'DEM' THEN betrag := euro * ; WHEN 'ESP' THEN betrag := euro * ; WHEN 'FIN' THEN betrag := euro * ; WHEN 'FRF' THEN betrag := euro * ; WHEN 'GRD' THEN betrag := euro * ; WHEN 'PTE' THEN betrag := euro * ; ELSE DBMS_OUTPUT.PUT_LINE('unbekannte Waehrung: ' waehrung); END CASE; 39
40 Basic Loop Syntax: LOOP EXIT WHEN <bedingung> ; END LOOP; Typische Anwendung: Cursor-Bearbeitung OPEN c_student; LOOP FETCH c_student INTO rec_student; EXIT WHEN c_student%notfound; END LOOP; CLOSE c_student; 40
41 WHILE Loop Syntax: WHILE <bedingung> LOOP END LOOP; Bemerkung: Prinzipiell kann auch in der WHILE-Schleife eine EXIT- Anweisung verwendet werden (schlechter Stil?) Es gibt in PL/SQL keine REPEAT UNTIL Schleife. 41
42 FOR Loop Syntax: FOR <var> IN a..b LOOP END LOOP; Bemerkung: Die Lauf-Variable wird automatisch deklariert (und muss daher nicht im Deklarationsteil definiert werden) Durchlaufen des Zahlenbereichs in umgekehrter Richtung ist möglich: FOR <var> IN REVERSE a..b LOOP Die Schrittlänge kann nicht beeinflusst werden. Sie ist immer 1 (bzw. -1). 42
43 Fehlerbehandlung Exception Section Exception Handling Oracle Exceptions user-defined Exceptions
44 Exception Section Syntax: Beispiel BEGIN EXCEPTION WHEN NO_DATA_FOUND THEN ; WHEN TOO_MANY_ROWS THEN ; WHEN OTHERS THEN ; END; Bemerkung: Es können Exception Handler für beliebig viele Fehlersituationen definiert werden. WHEN OTHERS: ist sozusagen der "ELSE"-Zweig. 44
45 Exception Handling Einige Prinzipien: 1. Wenn ein PL/SQL-Programm auf einen Fehler stößt, springt die Programm-Ausführung zur Exception Section. 2. Falls kein passender Fehlerzweig gefunden wird, wird der WHEN OTHERS Teil ausgeführt (falls vorhanden). 3. Wenn die Fehlersituation von einem Fehlerzweig (oder von WHEN OTHERS) abgedeckt wird, gilt die Ausführung des PL/SQL-Blocks als "erfolgreich". 4. Falls die Fehlersituation von keinem Fehlerzweig abgedeckt wird (und es kein WHEN OTHERS gibt), wird die Exception zum umschließenden Block propagiert. 5. Diese Exception Propagation (lt. Punkt 4) gilt auch bei Prozedur- oder Funktionsaufrufen. 45
46 Oracle Exceptions Einige Oracle Exceptions haben vordefinierte Namen, z.b.: NO_DATA_FOUND: Select - Into Statement innerhalb eines PL/SQL Blocks liefert 0 Zeilen. TOO_MANY_ROWS: Select - Into Statement innerhalb eines PL/SQL Blocks liefert mehr als 1 Zeile. CASE NOT FOUND: Keine WHEN-Klausel innerhalb eines CASE-Statements wird ausgeführt (und es gibt auch keinen ELSE-Zweig). DUP_VAL_ON_INDEX: Versuchte Verletzung eines Primary Key oder Unique Constraint. etc. Bemerkung: Nicht alle Oracle Exceptions haben so einen vordefinierten Namen. 46
47 Nützliche Funktionen Funktionen: SQLCODE: liefert die Oracle Fehlernummer (ORA- ) SQLERRM: liefert die Oracle Fehlermeldung (Text). Beispiel: EXCEPTION WHEN ; WHEN OTHERS THEN l_err_num := SQLCODE; l_err_msg := substr(sqlerrm,1,100); dbms_output.put_line ('FehlerNr: ' l_err_num ' FehlerMsg: ' l_err_msg); END; 47
48 User-defined Exceptions Idee: Fehler aus Applikationssicht muss nicht unbedingt ein Fehler aus Oracle Sicht sein. Daher gibt es in PL/SQL die Möglichkeit der benutzerdefinierten Exceptions. 3 Teile: Deklaration, "RAISE", Exception-Handler. Syntax: DECLARE my_exception EXCEPTION; BEGIN IF <bedingung> THEN RAISE my_exception; EXCEPTION WHEN my_exception THEN ; END; 48
49 Stored Program Units Prozeduren Funktionen Packages Trigger
50 Prozeduren Definition: CREATE [OR REPLACE] PROCEDURE my_procedure AS -- oder: IS -- Deklarationsteil BEGIN EXCEPTION END; Bemerkung: Schlüsselwort "DECLARE" entfällt, da der Deklarationsteil durch Prozedur-Kopf und BEGIN gekennzeichnet ist. Löschen einer stored procedure: DROP PROCEDURE my_procedure; 50
51 Beispiel -- StudentInnenen in eine andere Tabelle kopieren CREATE OR REPLACE PROCEDURE p_copy_student AS CURSOR c_student IS SELECT * FROM Studenten s; BEGIN FOR rec_student IN c_student LOOP INSERT INTO Studenten_Kopie VALUES (rec_student.matrnr, rec_student.name, rec_student.semester); END LOOP; END; / 51
52 Parameter Parameter: Arten: IN, OUT oder IN OUT Datentyp: nur die Typfamilie (ohne Size-Information) Beispiel: CREATE OR REPLACE PROCEDURE p_copy_student (l_sem IN NUMBER, l_anzahl OUT NUMBER) AS CURSOR c_student IS SELECT * FROM Studenten s WHERE s.semester = l_sem; BEGIN l_anzahl := c_student%rowcount; END; / 52
53 Prozeduraufrufe Von einem PL/SQL-Block aus (d.h. anonymer PL/SQL-Block oder stored program unit): DECLARE anzahl NUMBER(2); BEGIN p_copy_student(4,anzahl); dbms_output.put_line(to_char(anzahl)); END; / Von SQL*PLUS aus: variable anzahl NUMBER; execute p_copy_student(4,:anzahl); print anzahl; 53
54 Transaction Control Ein Prozeduraufruf (ebenso ein Funktionsaufruf) bedeutet eine Fortsetzung der laufenden Transaktion. Innerhalb einer Prozedur (oder einer Funktion) können auch Transaction Control Kommandos stehen, d.h.: COMMIT, ROLLBACK, SAVEPOINT. Transaction Control Kommandos innerhalb einer Prozedur (oder Funktion) haben denselben Effekt wie innerhalb des aufrufenden Blocks. In Triggern sind keine Transaction Control Kommandos erlaubt. 54
55 Funktionen Definition: CREATE [OR REPLACE] FUNCTION my_function ( <Parameterliste> ) RETURN <Datentyp> AS -- oder: IS -- Deklarationsteil BEGIN RETURN <ausdruck>; EXCEPTION END; Löschen: DROP FUNCTION my_function; 55
56 Beispiel CREATE OR REPLACE FUNCTION f_copy_student (l_sem IN NUMBER) RETURN NUMBER AS l_anzahl NUMBER; CURSOR c_student IS ; BEGIN l_anzahl := c_student%rowcount; RETURN l_anzahl; END; / 56
57 Funktionsaufrufe (1) Von einem PL/SQL-Block aus (d.h. anonymer PL/SQL-Block oder stored program unit): DECLARE anzahl NUMBER(2); BEGIN anzahl := f_copy_student(4); dbms_output.put_line(to_char(anzahl)); END; / Von SQL*PLUS aus: variable anzahl NUMBER; execute :anzahl := f_copy_student(4); print anzahl; 57
58 Funktionsaufrufe (2) Im Gegensatz zu Prozeduren können Funktionen auch innerhalb eines SQL-Statements aufgerufen werden, z.b.: SELECT, f_anzahl (s.semester) as anzahl FROM WHERE ; SELECT FROM WHERE f_anzahl (s.semester)> 17; Voraussetzung für Funktionsaufrufe von SQL aus: Ausschließlich IN-Parameter Keine Transaction Control Kommandos Ausschließlich SQL-Datentypen (und nicht z.b. BOOLEAN) bei Parametern und RETURN-Wert Keine Seiteneffekte auf die Datenbank 58
59 Packages Idee: Mehrere Definitionen (Prozeduren, Funktionen, Variablen, Typen, Cursor, Exceptions) werden zu einer Einheit (dem "Package") zusammengefasst. Vorteile: Strukturierung Kapselung: public / private Definition Trennung von Schnittstellen und Implementierung Definition von (Session-)globalen Variablen Overloading von Prozeduren und Funktionen zusätzliche Caching-Möglichkeiten, z.b. bei Cursor Package Definition: Package Specification (Schnittstelle + public Definitionen) Package Body (Implementierung + private Definitionen) 59
60 Package Specification Definition: CREATE [OR REPLACE] PACKAGE my_package AS /* in beliebiger Reihenfolge: Variablen-, Cursor-Deklationen Typ-, Exception-Deklarationen Prozedurköpfe Funktionsköpfe */ END; / Löschen: DROP PACKAGE my_package; 60
61 Beispiel CREATE OR REPLACE PACKAGE copy_package AS PROCEDURE p_copy_student (l_sem IN NUMBER, l_anzahl OUT NUMBER); FUNCTION f_copy_student (l_sem IN NUMBER) RETURN NUMBER; FUNCTION f_anzahl (l_sem IN NUMBER) RETURN NUMBER; END; / 61
62 Package Body Definition: CREATE [OR REPLACE] PACKAGE BODY my_package AS /* in beliebiger Reihenfolge: Private Deklarationen (sind nur innerhalb des Package Body sichtbar) Prozedur-Implementierungen Funktions-Implementierungen */ END; / Löschen: DROP PACKAGE BODY my_package; 62
63 Beispiel CREATE OR REPLACE PACKAGE BODY copy_package AS PROCEDURE p_copy_student (l_sem ) AS CURSOR c_student IS SELECT * FROM ; BEGIN END p_copy_student; FUNCTION f_copy_student (l_sem IN NUMBER) RETURN NUMBER AS CURSOR c_student IS SELECT * FROM ; BEGIN END f_copy_student; /* f_ beim END optional */ END copy_package; /* copy_ beim END optional */ / 63
64 Verwendung der Definitionen außerhalb des Package: inclusive Package-Name, mit Punktnotation, z.b.: variable anzahl NUMBER; execute copy_package.p_copy_student(2,:anzahl); print anzahl; innerhalb des Package (sowohl in der Specification als auch im Body): ohne Package-Name, z.b. FUNCTION f_copy_student BEGIN p_copy_student(l_semester, l_anzahl); END; 64
65 Trigger Trigger-Definition für eine Tabelle: CREATE [OR REPLACE] TRIGGER my_trigger [BEFORE, AFTER] [INSERT, DELETE, UPDATE] [OF <spalten-name>] ON <tabellen-name> [REFERENCING OLD as <name> NEW as <name>] [FOR EACH ROW] [WHEN <bedingung>] <Trigger-Body> Löschen: DROP TRIGGER my_trigger; Deaktivieren: ALTER TRIGGER my_trigger DISABLE; Aktivieren: ALTER TRIGGER my_trigger ENABLE; 65
66 Trigger Body Entweder ein PL/SQL-Block: DECLARE BEGIN EXCEPTIION END; Oder ein Prozedur-Aufruf: call my_procedure; Bemerkung: Declare- und Exception-Section sind optional. Falls der PL/SQL-Block eine Declare Section enthält, muss das Schlüsselwort "DECLARE" explizit verwendet werden. 66
67 Trigger-Ausführung Der Trigger wird im Zusammenhang mit einem DML-Event ausgeführt, d.h. INSERT und/oder UPDATE und/oder DELETE (Bemerkung: DML = Data manipulation language): BEFORE / AFTER: Trigger wird vor oder nach dem Event ausgeführt. FOR EACH ROW: Trigger wird für jede Zeile, die vom aktuellen DML-Kommando betroffen ist, ausgeführt oder nur ein Mal für das DML-Kommando. Vorsicht bei mehreren Triggern: Bei mehreren Triggern auf einer Tabelle ist die Reihenfolge der Ausführung nicht definiert. Eine Aktion innerhalb eines Triggers kann selbst wiederum einen Trigger auslösen. 67
68 Werte von NEW und OLD Allgemeine Regeln: OLD und NEW werden innerhalb des PL/SQL-Codes im Trigger Body mittels :OLD bzw. :NEW verwendet. OLD und NEW beziehen sich immer auf eine Zeile. => "FOR EACH ROW" erforderlich (auch bei INSERT) Zugriff auf die Spalten innerhalb der Zeile mittels Punkt- Notation, z.b. :OLD.spalte1 oder :NEW.spalte2 Wann NEW und OLD definiert sind: INSERT: OLD undefiniert, NEW enthält die insert-werte UPDATE: OLD und NEW definiert DELETE: OLD enthält die "alten" Werte, NEW undefiniert. 68
69 Typische Trigger-Anwendungen Komplexe Integritätsbedingungen: Mit Triggern lassen sich wesentlich komplexere Bedingungen formulieren als mit CHECK-Constraints (z.b.: Bedingungen, die von alten und neuen Werten abhängen) Referentielle Integrität: Mit Triggern können Änderungen eines referenzierten Schlüssels "kaskadiert" werden (z.b.: Bei Änderung einer Abteilungsbezeichnung in einem Unternehmen müssen die Foreign Keys in der Mitarbeiter-Tabelle angepasst werden) Abgeleitete Daten: Mittels Trigger werden zusammenhängende Daten konsistent gehalten (z.b.: Tabelle mit Einzelbestellungen und Spalte mit Gesamtpreis). 69
70 Beispiel CREATE OR REPLACE TRIGGER t_trigger AFTER UPDATE OF AbtNr ON Abteilungen FOR EACH ROW -- Tabelle Mitarbeiter hat einen FK auf Abteilungen DECLARE CURSOR c_mitarbeiter IS SELECT * FROM mitarbeiter m WHERE m.abtnr = :OLD.AbtNr FOR UPDATE; BEGIN FOR rec_mitarbeiter IN c_mitarbeiter LOOP UPDATE Mitarbeiter SET AbtNr = :NEW.AbtNr WHERE CURRENT OF c_mitarbeiter; END LOOP; END; / 70
71 INSTEAD OF Trigger (1) Views sind üblicherweise nicht durch DML-Kommandos änderbar (insbesondere Views, die mittels Joins, Aggregat- Funktionen, GROUP BY, etc. definiert wurden). Mittels INSTEAD OF Trigger können DML-Aktionen "nachgebaut" werden, d.h.: Der Trigger führt die entsprechenden Aktionen auf den Basistabellen der View durch, z.b.: INSTEAD OF UPDATE: Trigger kann mit den NEW-Werten die Updates auf den Basistabellen durchführen. INSTEAD OF INSERT: Trigger kann mit den NEW-Werten entsprechende Zeilen in den Basistabellen einfügen. INSTEAD OF DELETE: Trigger kann mit Hilfe der OLD- Werte Zeilen in den Basistabellen finden und löschen. 71
72 INSTEAD OF Trigger (2) Definition: CREATE [OR REPLACE] TRIGGER my_trigger INSTEAD OF [INSERT, DELETE, UPDATE] [OF <spalten-name>] ON <view-name> [REFERENCING OLD as <name> NEW as <name>] [FOR EACH ROW] [WHEN <bedingung>] <Trigger-Body> Löschen: DROP TRIGGER my_trigger; Aktivieren/Deaktivieren: ALTER TRIGGER 72
73 Beispiel CREATE OR REPLACE TRIGGER t_instead_trigger INSTEAD OF UPDATE ON lesen_view -- View = Join der Tabellen Vorlesungen und Professoren FOR EACH ROW BEGIN IF (:OLD.VorlNr!= :NEW.VorlNr) OR (:OLD.PersNr!= :NEW.PersNr) THEN -- Fehler ELSIF :NEW.Titel!= :OLD.Titel THEN UPDATE Vorlesungen SET Titel = :NEW.Titel WHERE VorlNr = :OLD.VorlNr; ELSIF :NEW.Name!= :OLD.Name THEN UPDATE Professoren SET Name = :NEW.Name WHERE PersNr = :OLD.PersNr; END IF; END; / 73
Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion
Überblick über Stored Functions Funktionen Eine Funktion ist ein benannter PL/SQL- Block, der einen Wert zurückgibt. Eine Funktion kann in der Datenbank als Objekt zur wiederholbaren Ausführung gespeichert
MehrEinführung in PL/SQL
Einführung in PL/SQL Procedural Language/Structured Query Language Prozedurale Erweiterung der Sprache SQL für Elemente wie Variablen, Schleifen, Bedingungen, Ausnahmebehandlung Dr. Christian Senger Einführung
MehrPL/pgSQL. VL Datenbanksysteme. Ingo Feinerer
PL/pgSQL VL Datenbanksysteme Ingo Feinerer Arbeitsbereich Datenbanken und Artificial Intelligence Institut für Informationssysteme Technische Universität Wien Gliederung Einführung PL/pgSQL-Programmteile
MehrProzedurale SQL-Erweiterungen
Prozedurale SQL-Erweiterungen Prozedurale SQL-Erweiterungen unterscheiden sich typischerweise durch die folgenden Punkte von dem Ansatz der Einbettung: Neue dedizierte Sprache mit direkter Integration
MehrDatenbanksysteme 2013
Datenbanksysteme 2013 Kapitel 8: Datenintegrität Vorlesung vom 14.05.2013 Oliver Vornberger Institut für Informatik Universität Osnabrück Datenintegrität Statische Bedingung (jeder Zustand) Dynamische
MehrProzedurale Datenbank- Anwendungsprogrammierung
Idee: Erweiterung von SQL um Komponenten von prozeduralen Sprachen (Sequenz, bedingte Ausführung, Schleife) Bezeichnung: Prozedurale SQL-Erweiterung. In Oracle: PL/SQL, in Microsoft SQL Server: T-SQL.
MehrVorbereitungen zum 3. Praktikum (PL/SQL):
Vorbereitungen zum 3. Praktikum (PLSQL): SQL ist eine nicht-prozedurale Sprache der 4. Generation, die es nicht erlaubt, Elemente von 3.-Generation-Sprachen (Schleifen, Verzweigungen, etc.) zu benutzen.
Mehr10. Programmieren in SQL
10. Programmieren in SQL Inhalt 10.1 Motivation 10.2 Prozedurale Erweiterungen von SQL 10.3 Gespeicherte Prozeduren 10.4 Benutzerdefinierte Funktionen 10.5 Verwendung anderer Programmiersprachen 2 10.1
MehrArbeit mit zusammengesetzten Datentypen
Arbeit mit zusammengesetzten Datentypen Zusammengesetzte Datentypen Typen: PL/SQL RECORDS PL/SQL TABELLEN Enthalten interne Komponenten Sind wiederverwendbar Copyright Oracle Corporation, 1998. All rights
MehrFunktion definieren Gibt Summe der Gehälter zurück. Aufruf in einem SQL-Statement
Funktion definieren Gibt Summe der Gehälter zurück Aufruf in einem SQL-Statement Dr. Christian Senger Einführung PL/SQL 1 Procedures & Transaktionen CREATE OR REPLACE PROCEDURE write_log ( log_code IN
MehrStruktur von PL/SQL. Oracle PL/SQL Die Programmiersprache von Oracle. Ein Beispiel. Bildschirmausgabe. Using Oracle PL/SQL.
Oracle PL/SQL Die Programmiersprache von Oracle Struktur von PL/SQL Using Oracle PL/SQL http://www-db.stanford.edu/~ullman/fcdb/oracle/or-plsql.html Constraints and Triggers http://www-db.stanford.edu/~ullman/fcdb/oracle/or-triggers.html
MehrEinführung in PL/SQL
Einführung in PLSQL Prozedurale Erweiterung der Sprache SQL um Elemente wie Variablen, Schleifen, Bedingungen, Ausnahmebehandlung Code läuft innerhalb der Datenbank ab und ist deshalb sehr performant Zusätzlich
MehrOracle SQL. Seminarunterlage. Version vom
Seminarunterlage Version: 12.16 Version 12.16 vom 12. Oktober 2017 Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen sind Warenzeichen
MehrAusnahmebehandlung. Ausnahmebehandlung mit PL/SQL. Ausnahmetypen. Ausnahmebehandlung
behandlung mit PL/SQL behandlung Was ist eine? Anzeige von Fehlern Wie werden sie angezeigt? Ein Oracle error erscheint. Die Anzeige ist explizit. Wie behandelt man es? Abfangen mit einem Programm. Weiterleiten
MehrSchnellübersichten. SQL Grundlagen und Datenbankdesign
Schnellübersichten SQL Grundlagen und Datenbankdesign 5 Datenbanken 2 6 Tabellen erstellen und verwalten 3 7 Daten einfügen, aktualisieren, löschen 4 8 Einfache Datenabfragen 5 9 Schlüsselfelder und Indizes
MehrOracle Datenbankprogrammierung mit PL/SQL Grundlagen
Oracle Datenbankprogrammierung mit PL/SQL Grundlagen Seminarunterlage Version: 12.05 Version 12.05 vom 29. Januar 2015 Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt-
MehrDatenbanken 1 und Objektorientierte Datenbanken
Struktur eines PLSQL Blocks DECLARE Definition und Initialisierung 1 der im Block benutzten Variablen und Cursors EXCEPTION Wertzuweisungen, Operationen
MehrKapitel 9. Embedded SQL. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1
Kapitel 9 Embedded SQL Vorlesung Datenbanken 1 Embedded SQL (siehe auch [Date00]) Arbeitsweise ähnlich PL/SQL, allerdings: Normale Programmiersprache mit eingestreuten SQL-Befehlen und anderen Befehlen
MehrÜbung PL/SQL Trigger Lösungen
Übung PL/SQL Trigger Lösungen 1) Gebe das aktuelle Datum aus. Wofür steht dual? Ändere das Datum für Deine aktuelle Session auf das Format Jahr (4 Stellen) Monat (2 Stellen) Tag (2 Stellen)[Leerzeichen]Stunde
MehrPL/pgSQL. VU Datenbanksysteme. Reinhard Pichler
PL/pgSQL VU Datenbanksysteme Reinhard Pichler Arbeitsbereich Datenbanken und Artificial Intelligence Institut für Informationssysteme Technische Universität Wien Wintersemester 2015/16 Gliederung Einführung
MehrSQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99
SQL Früherer Name: SEQUEL SQL: Structured Query Language Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99 SQL ist eine deklarative Anfragesprache Teile von SQL Vier große Teile:
MehrWS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #3. SQL (Teil 1)
Vorlesung #3 SQL (Teil 1) Fahrplan Wiederholung/Zusammenfassung Relationales Modell Relationale Algebra Relationenkalkül Geschichte der Sprache SQL SQL DDL (CREATE TABLE...) SQL DML (INSERT, UPDATE, DELETE)
MehrEntwicklungsumgebung für die Laborübung
Vorlesung Datenbanksysteme vom 22.10.2007 Entwicklungsumgebung für die Laborübung Minteka Server SQL*PLUS Einführung nützliche Kommandos und Views Freie Oracle Tools Beispiel Minteka Server Minteka Secure
MehrZusammengesetzte Datentypen
Zusammengesetzte Datentypen.1 Records... -4.1.1 Implizite Typdeklaration mit %ROWTYPE... -6.1.2 Referenzierung eines Records... -6.2 PL/SQL Tables... -8.2.1 Deklaration einer PL/SQL Table... -8.3 Referenzierung
MehrDatenintegrität. Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung
Datenintegrität Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung Statische vs. dynamische Integritätsbedingungen Statische Integritätsbedingungen Bedingungen
MehrDatenintegrität. Kapitel 5 1
Datenintegrität Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung statische Integritätsbedingungen Bedingungen an den Zustand der Datenbasis dynamische
MehrExplizite Cursor. Cursor. Steuerung des expliziten Cursors. Explizite Cursor Funktionen
Explizite Jedes SQL Statement, das der Oracle Server ausführt, hat einen individuellen, der verbunden ist mit: Implizitem : Declariert für alle DML-Statements und PL/SQL SELECT Statements. Explizitem :
MehrBeispiel zur referentiellen Integrität
3. Der SQL-Standard 3.14. Integrität und Trigger Seite 1 Beispiel zur referentiellen Integrität CREATE TABLE T1( k1 NUMERIC NOT NULL PRIMARY KEY); CREATE TABLE T2( k2 NUMERIC NOT NULL PRIMARY KEY, k1 NUMERIC,
MehrWiederholung VU Datenmodellierung
Wiederholung VU Datenmodellierung VU Datenbanksysteme Reinhard Pichler Arbeitsbereich Datenbanken und Artificial Intelligence Institut für Informationssysteme Technische Universität Wien Wintersemester
MehrDatenintegrität. Arten von Integritätsbedingungen. Statische Integritätsbedingungen. Referentielle Integrität. Integritätsbedingungen in SQL.
Datenintegrität Arten von Integritätsbedingungen Statische Integritätsbedingungen Referentielle Integrität Integritätsbedingungen in SQL Trigger 1 Datenintegrität Einschränkung der möglichen Datenbankzustände
Mehr[ SQL] Wissen, das sich auszahlt
[www.teia.de SQL] Wissen, das sich auszahlt INHALT SEITE 12 [I] 1] Einführung in SQL und relationale Datenbanken 12 14 16 18 11 1.1 1.2 Einführung Die Structured Query Language (SQL) Tabellen Mehrere Tabellen
MehrGespeicherte Prozeduren
Gespeicherte Prozeduren Lehrveranstaltung Datenbanktechnologien Prof. Dr. Ingo Claßen Prof. Dr. Martin Kempa Hochschule für Technik und Wirtschaft Berlin Variablen und Typen Elementare Sprachelemente Fallunterscheidung
MehrDatenintegrität. Kapitel 5 1
Datenintegrität Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung statische Integritätsbedingungen Bedingungen an den Zustand der Datenbasis dynamische
MehrDatenbanksysteme noch Kapitel 7: SQL Vorlesung vom Oliver Vornberger. Institut für Informatik Universität Osnabrück
Datenbanksysteme 2013 noch Kapitel 7: SQL Vorlesung vom 13.05.2013 Oliver Vornberger Institut für Informatik Universität Osnabrück Sprung Transititve Hülle Transitive Hülle 35.) Liste alle Voraussetzungen
MehrWiederholung VU Datenmodellierung
Wiederholung VU Datenmodellierung VL Datenbanksysteme Reinhard Pichler Arbeitsbereich Datenbanken und Artificial Intelligence Institut für Informationssysteme Technische Universität Wien Wintersemester
MehrFakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS Trigger. Andreas Schmidt Trigger 1/25
Trigger Andreas Schmidt Trigger 125 Trigger Konzept, um automatisch auf vordefinierte Ereignisse in der Datenbank zu reagieren Trigger sind mit Datenbanktabelle verknüpft Auslösung durch DML Befehle INSERT,
MehrWS 2010/11 Datenbanksysteme Fr 15:15 16:45 R 1.008. Vorlesung #5. SQL (Teil 3)
Vorlesung #5 SQL (Teil 3) Fahrplan Besprechung der Übungsaufgaben Rekursion Rekursion in SQL-92 Rekursion in DBMS- Dialekten (Oracle und DB2) Views (Sichten) - gespeicherte Abfragen Gewährleistung der
MehrKapitel 4 Dynamisches SQL
Kapitel 4 Dynamisches SQL Flien zum Datenbankpraktikum Wintersemester 2012/13 LMU München 2008 Thmas Bernecker, Tbias Emrich 2010 Tbias Emrich, Erich Schubert unter Verwendung der Flien des Datenbankpraktikums
MehrCursor erlauben eines zeilenweise Verarbeitung einer Tabelle oder eines Anfrageergebnisses in Transact-SQL
Cursor Cursor erlauben eines zeilenweise Verarbeitung einer Tabelle oder eines Anfrageergebnisses in Transact-SQL Cursor sind grob vergleichbar mit Iteratoren in modernen Programmiersprachen wie Java;
MehrKapitel 8: Datenintegrität
Kapitel 8: Datenintegrität Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines Schlüssels 1:N - Beziehung Angabe einer Domäne Jetzt:
MehrPraktische SQL-Befehle
Praktische SQL-Befehle Datenbanksysteme I WiSe 2018/2019 Todor Ivanov DB1 WS2018 1 Praktische SQL-Befehle Nested Selects Inserts Updates Views Triggers Constraints Functions Voraussetzung: Laptop + MySQL/
MehrDie Anweisung create table
SQL-Datendefinition Die Anweisung create table create table basisrelationenname ( spaltenname 1 wertebereich 1 [not null],... spaltenname k wertebereich k [not null]) Wirkung dieses Kommandos ist sowohl
MehrDatenbanken: Prozedurales SQL
Datenbanken: Prozedurales SQL Anwendungsentwicklung für relationale Datenbanken setzt voraus, dass prozedurale Abläufe programmiert werden können! (Endanwendern ist nicht zuzumuten, SQL zu lernen und selbst
MehrEntwicklungsumgebung für die Laborübung
Entwicklungsumgebung für die Laborübung VL Datenbanksysteme Ingo Feinerer Arbeitsbereich Datenbanken und Artificial Intelligence Institut für Informationssysteme Technische Universität Wien Gliederung
MehrWS 2010/11 Datenbanksysteme Fr 15:15 16:45 R 1.008. Vorlesung #6. SQL (Teil 4)
Vorlesung #6 SQL (Teil 4) Fahrplan Besprechung der Übungsaufgaben Einschub: Self Joins (relevant fürs Praktikum) Dynamische Intergritätsbedingungen, das Trigger - Konzept von Oracle Prozedurale Erweiterungen,
MehrSQL-Programmteile in der Vorlesung. SQL-Vertiefung. Definition von Constraints. Constraint Typen
SQL-Programmteile in der Vorlesung SQL-Vertiefung VL Datenbanksysteme Ingo Feinerer Arbeitsbereich Datenbanken und Artificial Intelligence Institut für Informationssysteme Technische Universität Wien 12.10.2009
MehrRelationales Datenbanksystem Oracle
Relationales Datenbanksystem Oracle 1 Relationales Modell Im relationalen Modell wird ein relationales Datenbankschema wie folgt beschrieben: RS = R 1 X 1 SC 1... R n X n SC n SC a a : i=1...n X i B Information
MehrSQL-Vertiefung. VL Datenbanksysteme. Ingo Feinerer
SQL-Vertiefung VL Datenbanksysteme Ingo Feinerer Arbeitsbereich Datenbanken und Artificial Intelligence Institut für Informationssysteme Technische Universität Wien Gliederung Einführung SQL-Programmteile
MehrISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski. www.iit.tu-cottbus.de
08 Datenbanken Übung SQL Einführung Eckbert Jankowski www.iit.tu-cottbus.de Datenmodell (Wiederholung, Zusammenfassung) Objekte und deren Eigenschaften definieren Beziehungen zwischen den Objekten erkennen/definieren
MehrTriggern. Change Data Capture
Triggern. Change Data Capture Triggers Was sind Triggers? Eine bestimmte Art von gespeicherte Prozedur, die automatisch ausgeführt wird wenn eine DML oder DDL Anweisung ausgeführt wird Eine Menge von Aktionen,
Mehr4.14 Integrität und Trigger
4.14 Integrität und Trigger Im Allgemeinen sind nur solche Instanzen einer Datenbank erlaubt, deren Relationen die der Datenbank bekannten Integritätsbedingungen (IB) erfüllen. Integritätsbedingungen können
MehrKapitel 4 Dynamisches SQL
Kapitel 4 Dynamisches SQL Flien zum Datenbankpraktikum Wintersemester 2010/11 LMU München 2008 Thmas Bernecker, Tbias Emrich unter Verwendung der Flien des Datenbankpraktikums aus dem Wintersemester 2007/08
MehrDatenbanken im WI-Unterricht mit
Datenbanken im WI-Unterricht mit Inhaltsverzeichnis 1 ER-Modell - Entity Relationship Modell 1 1.1 Entitäten................................................. 2 1.2 Relationen................................................
MehrModerne Datenbankkonzepte
Verteilte Datenbanken Moderne Datenbankkonzepte Wünschenswert, aber extrem aufwändig ( Zweiphasen Commit) Objektrelationale Datenbanken Kompromiss zwischen relational und rein objektorientiert seit 1999
Mehrzu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
MehrKontrollstrukturen in PL/SQL
Kontrollstrukturen in PL/SQL.1 Bedingte Anweisungen... -2.1.1 Die IF-THEN-Anweisung... -2.1.2 Die IF-THEN-ELSE-Anweisung... -.1.3 Die IF-THEN-ELSIF-Anweisung... -.1. Die CASE-Anweisung... -6.2 Schleifen
MehrWS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #4. SQL (Teil 2)
Vorlesung #4 SQL (Teil 2) Fahrplan Eine weitere Aggregation: median Geschachtelte Anfragen in SQL Korrelierte vs. Unkorrelierte Anfragen Entschachtelung der Anfragen Operationen der Mengenlehre Spezielle
MehrReferentielle Integrität
Datenintegrität Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung statische Integritätsbedingungen Bedingungen an den Zustand der Datenbasis dynamische
MehrTU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.
TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D. Übung zur Vorlesung Einführung in die Informatik 2 für Ingenieure (MSE) Alexander van Renen (renen@in.tum.de)
Mehr6. Trigger Charakterisierung von Triggern. 6. Trigger. Trigger definieren automatische Reaktionen auf Ereignisse, die durch Datenmanupilationen
6. Trigger Charakterisierung von Triggern 6. Trigger Trigger definieren automatische Reaktionen auf Ereignisse, die durch Datenmanupilationen auf einer Relation ausgelöst werden. Trigger stellen eine einfache
MehrObjektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern
Thema Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern Referent: Frank Sanders Seite 1 Inhalt Der Vortrag hat einen sehr kurzen Einleitungsteil der sich mit Objektorientierung
MehrPowerful PL/SQL: Collections indizieren mit VARCHAR2-Indizes
Powerful PL/SQL: Collections indizieren mit VARCHAR2-Indizes Autor: Klaus Friemelt, MT AG DOAGNews Q1_2005 Dieses Werk ist urheberrechtlich geschützt. Die dadurch begründeten Rechte, insbesondere die der
MehrDynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München
Kapitel 4 Dynamisches SQL Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München 2008 Thomas Bernecker, Tobias Emrich unter Verwendung der Folien des Datenbankpraktikums aus dem Wintersemester
Mehr3.3. Implementierung in SQL DDL-Grundlagen Constraint-Verzögerung Implementierungs-Strategien
CREATE TABLE SPEND_STAT ( S_STATUS VARCHAR2(1), STAT_TXT VARCHAR2(15), PRIMARY KEY (S_STATUS) ENABLE ) ; 3.3. Implementierung in SQL DDL-Grundlagen Constraint-Verzögerung Implementierungs-Strategien DDL:
MehrSemantische Integrität (auch: Konsistenz) der in einer Datenbank gespeicherten Daten als wichtige Anforderung
6. Datenintegrität Motivation Semantische Integrität (auch: Konsistenz) der in einer Datenbank gespeicherten Daten als wichtige Anforderung nur sinnvolle Attributwerte (z.b. keine negativen Semester) Abhängigkeiten
MehrDatenschutz: Zugriffsrechte in SQL
12. Datenschutz: Zugriffsrechte in SQL 12-1 12. Datenschutz: Zugriffsrechte in SQL 12-2 Inhalt Datenschutz: Zugriffsrechte in SQL 1. Anforderungen, Allgemeines 2. Die SQL-Befehle GRANT und REVOKE 3. Sichten
MehrReferentielle Integrität
Datenintegrität Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung statische Integritätsbedingungen Bedingungen an den Zustand der Datenbasis dynamische
MehrKapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1
Kapitel 10 JDBC und SQLJ 1 JDBC und SQLJ Bisher: Einbettung von SQL (statisch bzw. dynamisch) in C, C++, COBOL, ADA (embedded SQL) bzw. prozedurale Erweiterungen für SQL in Oracle (PL/SQL) Was ist mit
MehrOracle 10g Einführung
Kurs Oracle 10g Einführung Teil 5 Einführung Timo Meyer Administration von Oracle-Datenbanken Timo Meyer Sommersemester 2006 Seite 1 von 16 Seite 1 von 16 Agenda 1 Tabellen und Views erstellen 2 Indizes
MehrGrundlagen von SQL. Informatik 2, FS18. Dr. Hermann Lehner (Material von Dr. Markus Dahinden) Departement Informatik, ETH Zürich
Grundlagen von SQL Informatik 2, FS18 Dr. Hermann Lehner (Material von Dr. Markus Dahinden) Departement Informatik, ETH Zürich Markus Dahinden 13.05.18 1 Grundlagen von SQL (Structured Query Language)
Mehr5/14/18. Grundlagen von SQL. Grundlagen von SQL. Google, Facebook und Co. setzen auf SQL. Whatsapp
5/14/18 Grundlagen von SQL (Structured Query Language) Datenbanksprache Befehle Datenbanken und Tabellen erstellen/verändern Daten manipulieren (eingeben, ändern, löschen) Datenbank durchsuchen (Queries
MehrAbfragen (Queries, Subqueries)
Abfragen (Queries, Subqueries) Grundstruktur einer SQL-Abfrage (reine Projektion) SELECT [DISTINCT] {* Spaltenname [[AS] Aliasname ] Ausdruck} * ; Beispiele 1. Auswahl aller Spalten SELECT * ; 2. Auswahl
Mehr12. Datenschutz: Zugriffsrechte in SQL Datenschutz: Zugriffsrechte in SQL
12. Datenschutz: Zugriffsrechte in SQL 12-1 Datenschutz: Zugriffsrechte in SQL 12. Datenschutz: Zugriffsrechte in SQL 12-2 Inhalt 1. Anforderungen, Allgemeines 2. Die SQL-Befehle GRANT und REVOKE 3. Sichten
MehrKlausur PI Datenbanken II vom Name: Praktische Informatik (Krägeloh)
Versehen Sie jedes Aufgabenblatt/-blätter mit Ihrem Namen und geben es mit ab! Seite 1 Aufgabe 1: ( 30 Punkte) 1) Ein Entity-Set E1 wird in die Subklassen S1 und S2 spezialisiert. Was bedeutet die Aussage:
MehrPraktische SQL-Befehle 2
Praktische SQL-Befehle 2 Datenbanksysteme I WiSe 2018/2019 Todor Ivanov DB1 WS2018 1 Praktische SQL-Befehle Functions Views Triggers Voraussetzung: Laptop + MySQL/ MariaDB + Workbench! DB1 WS2018 2 Airport
MehrStrukturierte Objekttypen
Strukturierte Objekttypen Der Typ t approxmatch row des letzten Beispiels ist ein sogenannter Objekttyp. Definition: Ein Objekttyp ist ein Datentyp, bei dem (u.u. verschiedene) bekannte Datentypen zu einem
Mehr11 Anwendungsprogrammierung
11 11 11.1 Programmiersprachenanbindung 11.2 11.3 183 11 Programmiersprachenanbindung Programmiersprachenanbindung Kopplungsarten: prozedurale oder CALL-Schnittstellen (call level interface) Beispiele:
MehrDipl. Inf. Dipl. Math. Y. Orkunoglu Datum: 11.09.2009
Hochschule Darmstadt DATENBANKEN Fachbereich Informatik Praktikum 3 Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum: 11.09.2009 PL/SQL Programmierung Anwendung des Cursor Konzepts und Stored Procedures Und Trigger
MehrEntwicklungsumgebung für die Übung
Entwicklungsumgebung für die Übung VU Datenbanksysteme Wolfgang Fischl Arbeitsbereich Datenbanken und Artificial Intelligence Institut für Informationssysteme Technische Universität Wien Wintersemester
MehrKapitel 5 Dr. Jérôme Kunegis. SQL: Grundlagen. WeST Institut für Web Science & Technologien
Kapitel 5 Dr. Jérôme Kunegis SQL: Grundlagen WeST Institut für Web Science & Technologien Lernziele Kenntnis der Grundkonzepte von SQL Fähigkeit zur praktischen Anwendung von einfachen SQL-Anweisungen
MehrOracle PL/SQL Marco Skulschus Marcus Wiederstein
www.comelio-medien.com Oracle PL/SQL Marco Skulschus Marcus Wiederstein Oracle PL/SQL Marco Skulschus Marcus Wiederstein Oracle PL/SQL Marco Skulschus Marcus Wiederstein Webseite zum Buch: www.comelio-medien.com/buch-katalog/oracle/oracle_pl_sql
MehrLogging und Debugging. Gerd Volberg OPITZ CONSULTING Deutschland GmbH
Logging und Debugging Gerd Volberg OPITZ CONSULTING Deutschland GmbH Bochum, 20. Februar 2014 OPITZ CONSULTING GmbH Seite 1 Agenda 1. Logging Datenmodell Tabellen Views 2. Debugging Debug-Package Funktionen
MehrSeminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.
Seminar 2 SQL - DML(Data Manipulation Language) und DDL(Data Definition Language) Befehle. DML Befehle Aggregatfunktionen - werden auf eine Menge von Tupeln angewendet - Verdichtung einzelner Tupeln yu
MehrSQL: Weitere Funktionen
Vergleich auf Zeichenketten SQL: Weitere Funktionen LIKE ist ein Operator mit dem in Zeichenketten andere Zeichenketten gesucht werden; zwei reservierte Zeichen mit besonderer Bedeutung sind hier % (manchmal
MehrDatenintegrität. Referentielle Integrität. Referentielle Integrität in SQL. Bisherige Integritätsbedingungen
Datenintegrität eferentielle Integrität Integitätsbedingungen chlüssel Fremdschlüssel verweisen auf Tupel einer elation z.b. gelesenvon in Vorlesungen verweist auf Tupel in Professoren Beziehungskardinalitäten
MehrSQL (Structured Query Language) Schemata Datentypen
2 SQL Sprachelemente Grundlegende Sprachelemente von SQL. 2.1 Übersicht Themen des Kapitels SQL Sprachelemente Themen des Kapitels SQL (Structured Query Language) Schemata Datentypen Im Kapitel SQL Sprachelemente
MehrObjektorientierung unter Oracle richtet sich einerseits nach objekt-orientierten Programmiersprachen wie Java,
Tipps & Tricks: Objektorientierung Bereich: PLSQL Erstellung: 032001 HA Versionsinfo: 9.2, 10.2, 11.1 Letzte Überarbeitung: 062009 HA Objektorientierung unter Oracle Objektorientierung unter Oracle richtet
MehrAnwendungsentwicklung Datenbanken SQL. Stefan Goebel
Anwendungsentwicklung Datenbanken SQL Stefan Goebel SQL Structured Query Language strukturierte Abfragesprache von ANSI und ISO standardisiert deklarativ bedeutet was statt wie SQL beschreibt, welche Daten
MehrCADSTAR MRP-Link. MRP-Link ist erstellt von:
CADSTAR MRP-Link MRP-Link ist erstellt von: CSK CAD Systeme Kluwetasch Zip: 2161 Town: Altenholz Street: Struckbrook 9 Tel: +9-31-32917-0 Fax: +9-31-32917-26 Web: http://www.cskl.de E-Mail: Kluwetasch@cskl.de
MehrFakultät für Informatik & Wirtschaftsinformatik DB & IS II SS Transaktionen & ACID. Dr. Christian Senger Transaktionen & ACID 1
Transaktionen & ACID Dr. Christian Senger Transaktionen & ACID 1 PC Architekturen Kein Mehrbenuzterbetrieb Recovery? Benutzerabbrüche? PC Lokale Datenbank PC PC PC PC PC PC-System DBMS PC PC PC PC Internet
Mehr