Vorlesung Datenbanksysteme vom PL/SQL (von Oracle) Einführung Deklarationen Cursor Ablaufsteuerung Fehlerbehandlung stored program units

Größe: px
Ab Seite anzeigen:

Download "Vorlesung Datenbanksysteme vom PL/SQL (von Oracle) Einführung Deklarationen Cursor Ablaufsteuerung Fehlerbehandlung stored program units"

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

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

Mehr

Einführung in PL/SQL

Einfü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

Mehr

PL/pgSQL. VL Datenbanksysteme. Ingo Feinerer

PL/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

Mehr

Prozedurale SQL-Erweiterungen

Prozedurale 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

Mehr

Datenbanksysteme 2013

Datenbanksysteme 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

Mehr

Prozedurale Datenbank- Anwendungsprogrammierung

Prozedurale 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.

Mehr

Vorbereitungen zum 3. Praktikum (PL/SQL):

Vorbereitungen 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.

Mehr

10. Programmieren in SQL

10. 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

Mehr

Arbeit mit zusammengesetzten Datentypen

Arbeit 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

Mehr

Funktion 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 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

Mehr

Struktur von PL/SQL. Oracle PL/SQL Die Programmiersprache von Oracle. Ein Beispiel. Bildschirmausgabe. Using Oracle PL/SQL.

Struktur 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

Mehr

Einführung in PL/SQL

Einfü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

Mehr

Oracle SQL. Seminarunterlage. Version vom

Oracle 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

Mehr

Ausnahmebehandlung. Ausnahmebehandlung mit PL/SQL. Ausnahmetypen. Ausnahmebehandlung

Ausnahmebehandlung. 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

Mehr

Schnellübersichten. SQL Grundlagen und Datenbankdesign

Schnellü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

Mehr

Oracle Datenbankprogrammierung mit PL/SQL Grundlagen

Oracle 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-

Mehr

Datenbanken 1 und Objektorientierte Datenbanken

Datenbanken 1 und Objektorientierte Datenbanken Struktur eines PLSQL Blocks DECLARE Definition und Initialisierung 1 der im Block benutzten Variablen und Cursors EXCEPTION Wertzuweisungen, Operationen

Mehr

Kapitel 9. Embedded SQL. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Kapitel 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 Ü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

Mehr

PL/pgSQL. VU Datenbanksysteme. Reinhard Pichler

PL/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

Mehr

SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99

SQL. 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:

Mehr

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #3. SQL (Teil 1)

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

Mehr

Entwicklungsumgebung für die Laborübung

Entwicklungsumgebung 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

Mehr

Zusammengesetzte Datentypen

Zusammengesetzte 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

Mehr

Datenintegritä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 Datenintegrität Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung Statische vs. dynamische Integritätsbedingungen Statische Integritätsbedingungen Bedingungen

Mehr

Datenintegrität. Kapitel 5 1

Datenintegritä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

Mehr

Explizite Cursor. Cursor. Steuerung des expliziten Cursors. Explizite Cursor Funktionen

Explizite 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 :

Mehr

Beispiel zur referentiellen Integrität

Beispiel 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,

Mehr

Wiederholung VU Datenmodellierung

Wiederholung VU Datenmodellierung Wiederholung VU Datenmodellierung VU Datenbanksysteme Reinhard Pichler Arbeitsbereich Datenbanken und Artificial Intelligence Institut für Informationssysteme Technische Universität Wien Wintersemester

Mehr

Datenintegritä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. 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

[  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

Mehr

Gespeicherte Prozeduren

Gespeicherte 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

Mehr

Datenintegrität. Kapitel 5 1

Datenintegritä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

Mehr

Datenbanksysteme noch Kapitel 7: SQL Vorlesung vom Oliver Vornberger. Institut für Informatik Universität Osnabrück

Datenbanksysteme 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

Mehr

Wiederholung VU Datenmodellierung

Wiederholung VU Datenmodellierung Wiederholung VU Datenmodellierung VL Datenbanksysteme Reinhard Pichler Arbeitsbereich Datenbanken und Artificial Intelligence Institut für Informationssysteme Technische Universität Wien Wintersemester

Mehr

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS Trigger. Andreas Schmidt Trigger 1/25

Fakultä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,

Mehr

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R 1.008. Vorlesung #5. SQL (Teil 3)

WS 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

Mehr

Kapitel 4 Dynamisches SQL

Kapitel 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

Mehr

Cursor erlauben eines zeilenweise Verarbeitung einer Tabelle oder eines Anfrageergebnisses in Transact-SQL

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

Mehr

Kapitel 8: Datenintegrität

Kapitel 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:

Mehr

Praktische SQL-Befehle

Praktische 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/

Mehr

Die Anweisung create table

Die 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

Mehr

Datenbanken: Prozedurales SQL

Datenbanken: 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

Mehr

Entwicklungsumgebung für die Laborübung

Entwicklungsumgebung 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

Mehr

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R 1.008. Vorlesung #6. SQL (Teil 4)

WS 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,

Mehr

SQL-Programmteile in der Vorlesung. SQL-Vertiefung. Definition von Constraints. Constraint Typen

SQL-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

Mehr

Relationales Datenbanksystem Oracle

Relationales 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

Mehr

SQL-Vertiefung. VL Datenbanksysteme. Ingo Feinerer

SQL-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

Mehr

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski. www.iit.tu-cottbus.de

ISU 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

Mehr

Triggern. Change Data Capture

Triggern. 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,

Mehr

4.14 Integrität und Trigger

4.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

Mehr

Kapitel 4 Dynamisches SQL

Kapitel 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

Mehr

Datenbanken im WI-Unterricht mit

Datenbanken 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................................................

Mehr

Moderne Datenbankkonzepte

Moderne Datenbankkonzepte Verteilte Datenbanken Moderne Datenbankkonzepte Wünschenswert, aber extrem aufwändig ( Zweiphasen Commit) Objektrelationale Datenbanken Kompromiss zwischen relational und rein objektorientiert seit 1999

Mehr

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

zu 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

Mehr

Kontrollstrukturen in PL/SQL

Kontrollstrukturen 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

Mehr

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #4. SQL (Teil 2)

WS 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

Mehr

Referentielle Integrität

Referentielle 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

Mehr

TU 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. 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)

Mehr

6. 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 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

Mehr

Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern

Objektorientierte 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

Mehr

Powerful PL/SQL: Collections indizieren mit VARCHAR2-Indizes

Powerful 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

Mehr

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Dynamisches 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

Mehr

3.3. Implementierung in SQL DDL-Grundlagen Constraint-Verzögerung Implementierungs-Strategien

3.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:

Mehr

Semantische Integrität (auch: Konsistenz) der in einer Datenbank gespeicherten Daten als wichtige Anforderung

Semantische 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

Mehr

Datenschutz: Zugriffsrechte in SQL

Datenschutz: 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

Mehr

Referentielle Integrität

Referentielle 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

Mehr

Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Kapitel 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

Mehr

Oracle 10g Einführung

Oracle 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

Mehr

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

Mehr

5/14/18. Grundlagen von SQL. Grundlagen von SQL. Google, Facebook und Co. setzen auf SQL. Whatsapp

5/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

Mehr

Abfragen (Queries, Subqueries)

Abfragen (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

Mehr

12. Datenschutz: Zugriffsrechte in SQL Datenschutz: Zugriffsrechte in SQL

12. 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

Mehr

Klausur PI Datenbanken II vom Name: Praktische Informatik (Krägeloh)

Klausur 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:

Mehr

Praktische SQL-Befehle 2

Praktische 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

Mehr

Strukturierte Objekttypen

Strukturierte 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

Mehr

11 Anwendungsprogrammierung

11 Anwendungsprogrammierung 11 11 11.1 Programmiersprachenanbindung 11.2 11.3 183 11 Programmiersprachenanbindung Programmiersprachenanbindung Kopplungsarten: prozedurale oder CALL-Schnittstellen (call level interface) Beispiele:

Mehr

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum: 11.09.2009

Dipl. 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

Mehr

Entwicklungsumgebung für die Übung

Entwicklungsumgebung 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

Mehr

Kapitel 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 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

Mehr

Oracle PL/SQL Marco Skulschus Marcus Wiederstein

Oracle 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

Mehr

Logging und Debugging. Gerd Volberg OPITZ CONSULTING Deutschland GmbH

Logging 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

Mehr

Seminar 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. 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

Mehr

SQL: Weitere Funktionen

SQL: 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

Mehr

Datenintegrität. Referentielle Integrität. Referentielle Integrität in SQL. Bisherige Integritätsbedingungen

Datenintegritä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

Mehr

SQL (Structured Query Language) Schemata Datentypen

SQL (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

Mehr

Objektorientierung unter Oracle richtet sich einerseits nach objekt-orientierten Programmiersprachen wie Java,

Objektorientierung 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

Mehr

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel

Anwendungsentwicklung 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

Mehr

CADSTAR MRP-Link. MRP-Link ist erstellt von:

CADSTAR 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

Mehr

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II SS Transaktionen & ACID. Dr. Christian Senger Transaktionen & ACID 1

Fakultä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