PL/SQL

Werbung
SQL
Claus Andersen
Heiko Weber
Datum : 30.06.04
Seminar
Programmiersprachenkonzepte
Gliederung
Einführung in das Relationenmodell
 Einführung in SQL : DDL und IQL
 Transaktionen
 Synchronisation
 verteilte Datenbanken
 Aufbau eines Oracle – DB – Systems
 SQL*Plus
 PL/SQL
 Trigger
 Constraints vs. Trigger

Relationenmodell (1)



Das Relationenmodell wurde 1970 von Codd eingeführt
Es ist das am weitesten verbreitete Datenbankmodell, das
in der Praxis eingesetzt wird.
Einfachheit und Exaktheit des Relationenmodells hat
weitreichende Ergebnisse in der Datenbankforschung
ermöglicht.
Relationenmodell (2)
Datenbankschema besteht aus:

einer Menge von Relationenschemata
–
–

Die zu modellierende Anwendungswelt wird durch
Relationenschemata beschrieben.
Sie bestehen aus einer Menge von Attributen
Relationen
–
Menge von Tupel mit Attributwerten der Attribute der
Relationenschemata
Schlüssel
●
Primärschlüssel
Minimale Menge von Attributen, deren Werte ein Tupel einer
Relation eindeutig identifizieren
●
Fremdschlüssel
Attributmenge, die in einer anderen Relation (Primär)Schlüssel ist
Aufbau von Tabellen
Die Datenbank besteht aus einer Menge von Relationen, die
nach den Relationenschemata gebildet werden.
Beispiel Tabellen
Geschichte und Standards von
SQL (1)
1970 wurde das relationale Datenbankmodell von Codd
eingeführt
● 1974 wurde vom IBM-Forschungszentrum in San Jose
eine erste Datenbanksprache Sequel (Structured
English QUEry Language) entwickelt und 1976 zur
Sprache Sequel 2 weiter entwickelt
● In den ersten verfügbaren relationalen
Datenbanksystemen wurde eine Untermenge von Sequel 2
implementiert, die SQL genannt wurde
●
Geschichte und Standards von
SQL (2)
1982 bis 86 wurde SQL von der ANSI (American
National Standards Institute) genormt und üblicherweise
mit SQL-86 bezeichnet
● darauf folgte die von der ISO genormte Version SQL-89
● 1992 erschien die von der ANSI und ISO genormte
Version SQL-92 (SQL 2)
● SQL 3 war das letzte Normungsprojekt der ANSI und ISO
und wurde in gewissen Anteilen in den Standard SQL-99
überführt
●
Was ist SQL
SQL (Structured Query Language) ist die NormDatenbanksprache für relationale Datenbanksysteme.
Teilsprachen von SQL
•
•
•
•
DDL (Data Definition Language)
SSL (Storage Structure Language)
IQL (Interactive Query Language)
DML (Data Manipulation Language)
SQL-DDL
Was ist SQL-DDL
● ist eine Datendefinitionssprache zur
Umsetzung des Datenbankschemas
● ist Teil der Standardsprache für relationale
Datenbanksysteme (SQL)
Anforderungen an SQL-DDL
SQL-DDL sollte mindestens folgende Bestandteile
definieren können:
Attribute
● Wertebereiche
● Relationenschemata
● Primärschlüssel
● Fremdschlüssel
●
Konzepte für SQL-DDL(1)
create table, alter table und drop table
Definition von Relationenschemata
create table basisrelationenname
(spaltenname_1 wertebereich_1,
...
spaltenname_k werteberich_k)
Mit alter table kann man die angelegten Relationenschemata
ändern und mit drop table können Relationenschemata aus der
Datenbank entfernt werden.
create view, drop view ähnlich
Konzepte für SQL-DDL(2)
create domain, alter domain und drop domain
Definition von benutzerdefinierten Wertebereichen
create domain domainname Datentyp default Datenwert
SQL als Anfragesprache (1)
Der SFW-Block
Die select-Klausel
● gibt die Projektionsliste an
● integriert auch arithmetische Operationen und
Aggregatfunktionen
SQL als Anfragesprache (2)
Die from-Klausel
● spezifiziert zu verwendende Relationen
● führt eventuelle Umbenennungen durch
● verwendetete Relationen werden mittels eines kartesischen
Produkts verknüpft
SQL als Anfragesprache (3)
Die where-Klausel
● spezifiziert Selektionsbedingungen
● Verbundbedingungen, um aus dem kartesischen Produkt
einen Gleichverbund zu machen
● Geschachtelte Anfragen sind in der where-Klausel erlaubt
SQL als Anfragesprache (4)

Beispiel
SELECT S.Name
FROM Schauspieler S, Darsteller D
WHERE S.PNR = D.PNR
Einige Erweiterungen von SQL-92
gegenüber SQL-89 (1)
Neue Datentypen (z.B. Intervall)
● Domänenkonzept (create domain, alter domain)
● Änderung des Datenbankschemas (alter table, drop table)
● allgemeine Integritätsbedingungen über mehrere Tabellen
● Der Verbund join ist als eigener Operator vorhanden und
wird in diversen Varianten angeboten : cross join, join und
using, natural join
● Die Beschreibungen von Embedded SQL und Dynamic
SQL sind Teil der Norm
●
Einige Erweiterungen von SQL 3
gegenüber SQL-92
abstrakte Datentypen (ADTs)
● Objekt- Identifikatoren
● ADT und Tabellen Hierarchien
● Definition von Funktionen von ADTs
● Komplexe Datentypen wie Mengen,
Multimengen und Listen
● Rekursive Anfragen (with recursive und union)
●
Transaktionen

Definition:
–
Eine Transaktion ist eine ununterbrechbare Folge von
DML-Befehlen, die die Datenbank von einem logisch
konsistenten in einen (neuen) logisch konsisten Zustand
überführt
Transaktionen (2)

Transaktionen sollten dabei die ACIDEigenschaften besitzen
–
Atomarität


–
Die Transaktion ist die kleinste, nicht mehr zerlegbare Einheit
„alles-oder-nichts“-Prinzip
Consistency



Hinterlässt nur konsistenten Datenbankzustand
Zwischenzustände der Transaktionen dürfen jedoch inkonsistent
sein
Endzustand muss den Integritätsbedingungen erfüllen
Transaktionen (3)
–
Isolation

Nebenläufig ausgeführte Transaktionen dürfen sich nicht
beeinflussen
Transaktionen (4)
–
Durability



Wirkung einer erfolgreich abgeschlossener Transaktion bleibt
dauerhaft in der Datenbank
Auch nach einem Systemfehler muss die Wirkung gewährleistet
sein
Die Wirkung einer erfolgreich abgechlossenen Transaktion kann
nur durch eine kompensierende Transaktion aufgehoben werden
Synchronisation (Mehrbenutzerbetrieb)
• im Einbenutzerbetrieb werden Transaktionen immer
hintereinander ausgeführt
• im Mehrbenutzerbetrieb kann es vorkommen, dass mehrere
Transaktionen gleichzeitig (nebenläufig) ablaufen
• dies kann zu verschiedenen Problemen führen
Synchronisation (2)
Dirty Read:
T1
T2
Read(A);
A := A + 100;
Write(A)
Read(A);
Read(B);
B := B + A;
Write(B);
Commit;
Abort;
Sychronisation (3)
Non – Repeatable – Read:
Lesetransaktion
Änderungstransaktion
SELECT Gehalt INTO : gehalt
FROM Pers
WHERE Pnr = 2345;
summe := summe + gehalt
SELECT Gehalt INTO : gehalt
FROM Pers
WHERE Pnr = 3456;
summe := summe + gehalt;
DB-Inhalt
(Pnr, Gehalt)
2345 39.000
3456 48.000
UPDATE Pers
SET Gehalt = Gehalt + 1000
WHERE Pnr = 2345;
2345 40.000
UPDATE Pers
SET Gehalt = Gehalt + 2000
WHERE Pnr = 3456;
3456 50.000
Synchronisation (4)
Phantom - Problem:
Lesetransaktion
Änderungstransaktion
SELECT SUM(Gehalt) INTO : summe
FROM Pers
WHERE Anr = 17;
INSERT INTO Pers (Pnr, Anr, Gehalt)
VALUES (4567, 17, 55.000);
UPDATE Abt
SET Gehaltssumme = Gehaltsumme + 55.000
WHERE Anr = 17;
SELECT Gehaltssumme INTO : gsumme
FROM Abt
WHERE Anr = 17;
IF gsumme <> summe THEN
<Fehlerbehandlung>;
Synchronisation (5)
Konsistenzebenen in SQL:
Konsistenzebenen
Dirty Read
Non–Repeatable
Read
Phantome
Read Uncommitted
+
+
+
Read Committed
-
+
+
Repeatable – Read
-
-
+
Serializable
-
-
-
SET TRANSACTION READ ONLY,
ISOLATION LEVEL READ COMMITTED
Client-Server Prinzip
Zentraler Datenbestand auf den mehrere Clients Zugriff haben
Verteilte Datenbanken
Der Datenbestand wird in verteilten Datenbank Management Systemen
(VDBMS) physisch auf mehrer Knote (Rechnern) verteilt
Zwei-Phasen-Commit-Protokoll


Ausgehend von verteilten Transaktionen auf
unterschiedlichen Knoten im Netz sollen nach dem “alles
oder nichts“-Prinzip entweder alle Transaktionen oder keine
Transaktion durchgeführt werden.
Dies wird in verteilten Datenbanken durch das ZweiPhasen-Commit-Protokoll unterstützt
Oracle – DB - System
• Oracle Version 1 erschien 1979
• derzeit aktuell: Version 10g
• das Oracle System besteht aus dem Oracle – Server und
verschiedenen Tools zur Steuerung und Erzeugung von
Oracle – Datenbanken
• Oracle Precompiler wie PRO*C oder PRO*COBOL die
den Zugriff auf Oracle – DBs aus anderen Programmier –
sprachen unterstützen
• Oracle unterstützt direkt PL/SQL und Java
lauffähiges System
• ein Oracle – DB – System setzt sich aus den unabhängigen
Teilsystemen Instanz und Datenbank zusammen
• auf einem Server können mehrere Instanzen und Datenbanken
gleichzeitig aktiv sein
• ein lauffähiges System besteht aber immer aus einer Instanz und
einer angeschlossenen Datenbank
Zusammensetzung einer Instanz
• System Global Area (SGA)
• Serverprozesse
• Hintergrundprozesse
- Database Writer
- Process Monitor
System Global Area (SGA)
• prozessübergreifender Speicherbereich
• 3 Komponenten:
- Database Buffer Cache zum Zwischenspeichern von
Datenbankblock-Kopien (zur Performance-Steigerung)
- Redo Log Buffer zur Protokollierung von Änderungen
auf dem Database Buffer Cache
- Shared Pool enthält geparste SQL-Anweisungen,
kompilierte PL/SQL-Anweisungen und Datenbank-Trigger
Data Dictionary
• besondere Tabellen in der Datenbank
• bei Erzeugen einer neuen DB legt Oracle System und
DB-Informationen als Tabellen in der Datenbank selbst ab
• enthält Informationen über Benutzer und alle zur Funktionsfähigkeit der Datenbank notwendigen Informationen
SQL*Plus
• von Oracle entwickeltes interaktives Werkzeug zum Zugriff
auf Oracle - Datenbanken
• in Oracle - System integriert (seit Version 3), Vorgänger war
UFI (UserFriendlyInterface)
• äquivalent zu "isql" in Sybase and SQLServer,
"db2" in IBM DB2, "mysql" in MySQL
Benutzung von SQL*Plus
• aus dem Betriebssystem wird mit dem Kommando
SQLPLUS [Benutzer[/Paßwort][@Datenbankname]]
[Dateiname [Parameter1...]]
die interaktive Umgebung gestartet und an der angegebenen
Datenbank angemeldet
• nach dem Anmelden erscheint eine Eingabeaufforderung
‘SQL>‘
und das System ist zur Annahme von Anweisungen bereit
Benutzung von SQL*Plus (2)
• es können alle SQL – Anweisungen verwendet werden
• es können auch Dateien aufgerufen werden, die bereits SQL –
Anweisungen enthalten
• anonyme PL/SQL – Blöcke können eingegeben werden und
werden sofort ausgeführt
• es können auch PL/SQL – Dateien und StoredProcedures
aufgerufen und ausgeführt werden
• Transaktionen beginnen mit der ersten SQL – Anweisung und
enden mit dem Schlüsselwort COMMIT
SQL*Plus Befehlspuffer
• SQL*Plus legt jede aktuell eingebene SQL – Anweisung
bzw. jeden PL/SQL – Block im Befehlspuffer ab
• der Inhalt des Befehlspuffers läßt sich anzeigen und editieren
• die zuletzt eingegebene Zeile wird als aktuelle Zeile betrachtet
und mit einem ‘*‘ markiert
Beispiel SQL*Plus Befehlspuffer
SQL> run
1 select name
2 from person
3* where nname like 'MOR%';
ERROR at line 3:
ORA-00904: invalid column name
SQL> c/nname/name
3* where name like 'MOR%'
SQL>run
1 select name
2 from person
3 where name like 'MOR%';
NAME
------------------------------------MORLEY
MOROSCO
.....
Procedural Language / SQL
(PL/SQL)
• integraler Bestandteil von Oracle seit Version 6
• Erweiterung von SQL durch prozedurale Elemente
• Syntax ähnelt Ada
• ist in allen Oracle-Produkten verfügbar
• lässt sich auch in Client-Programmen in anderen Programmiersprachen einsetzen (C, C++, Ada, Cobol, Fortran, Pascal)
• erlaubt DML - Befehle aber keine DDL - Befehle
PL/SQL Code Beispiel
declare
anzahl
number(3);
begin
SELECT count(*);
INTO
anzahl
FROM
person;
end;
----------------------------------------------------------------PL/SQL procedure successfully completed
Verarbeitung von PL/SQL
• Entwicklung und Aufruf von PL/SQL-Blöcken erfolgt
z.B. in interaktiven Umgebungen wie SQL*Plus
• Verarbeitung erfolgt durch PL/SQL-Prozessor im Server
oder im Client
• aus anderen Programmiersprachen heraus wird über RPC
der Code an den PL/SQL-Prozessor im Server übergeben
• SQL-Anweisungen im PL/SQL-Code werden an den SQLProzessor weitergegeben, der das Ergebnis zurückgibt
Einschub : Variablen - Typen
• PL/SQL unterstützt folgende elementare Datentypen:
- char, varchar, number, boolean, date, rowid, raw
• und folgende strukturierte Datentypen:
- PL/SQL Table: eine Tabellenspalte mit einem
bestimmten Datentyp
- Record
• Datentyp von Variablen muss vor der Verwendung bekannt
sein
Elemente von PL/SQL
• anonyme Blöcke
• Prozeduren
• Funktionen
• Packages
• Trigger
Stored Procedures
Anonymer Block
• kann nicht aus anderen PL/SQL-Programmen aufgerufen
werden
• wird nicht in der Datenbank abgelegt
• wird direkt nach Eingabe ausgeführt
declare
begin
exception
end;
/*Deklarationsteil*/
/*Anweisungsteil*/
/*Exceptionteil*/
Prozeduren / Funktionen
• wie anonyme Blöcke, besitzen aber Definitionsteil
function | procedure | trigger Name [Parameterliste]
/*Definitionsteil*/
is
/*Deklarationsteil*/
begin
/*Anweisungsteil*/
exception
/*Exceptionteil*/
end;
Prozeduren / Funktionen (2)
• sind jederzeit aufrufbar und besitzen ein Parameterliste
zur Übergabe von Aufrufparametern
• mit dem Schlüsselwort CREATE können Prozeduren und
Funktionen in der Datenbank erzeugt und kompiliert gespeichert werden (StoredProcedures)
Packages
• dienen zur Strukturierung von umfangreichem Programmtext
• Zusammenfassung von logisch zusammengehörigen Variablen,
Typdefinitionen, Prozeduren und Funktionen
Diese können von anderen PL/SQL-Objekten referenziert werden
• objektorientiert: Definition von öffentlichen und privaten
Objekten, dadurch Kapselung von Daten
StoredProcedures
• da Funktionen und Prozeduren kompiliert in der Datenbank
vorliegen, entfällt die Übersetzungszeit beim Aufruf
• bei Zugriff auf eine StoredProcedure wird diese in den SGA
geladen und steht allen DB-Benutzern zur Verfügung bis sie
aus dem SGA verdrängt werden (LRU-Algorithmus)
• da das neue Laden in den SGA Zeit kostet, können wichtige SPs
auch explizit im SGA gehalten werden
Vorteile von PL/SQL
• bessere Performance bei mehreren aufeinander folgenden
DB-Zugriffen, wenn Anwendungsprogramm und Oracle-Server
auf verschiedenen Rechnern laufen
begin
insert into test1;
select from...;
insert into test2.;
end;
PL/SQL
Blockübergabe
Server
Trigger
• Trigger sind in PL/SQL oder SQL programmierte Objekte, die
wie StoredProcedures in der Datenbank gespeichert sind
• ein Trigger gehört immer zu einer Tabelle und kann nur implizit
aufgerufen werden, kann zur Integritätssicherung eingesetzt werden
• der Aufruf erfolgt vor (BEFORE) oder nach (AFTER) einer
Insert -, Update – oder Delete - Operation auf einer Tabelle
• Trigger können StoredProcedures, weitere Trigger, DML und
DDL – Anweisungen benutzen
• zwei Typen: Zeilen - und Anweisungstrigger
(Zeilen-) Trigger Beispiel
TRIGGER historie_trg
after INSERT or UPDATE or DELETE on film FOR EACH ROW
begin
if INSERTING then
prc_ins_syshist( ‘FILM‘ ,‘I‘, :new.film_id);
end if;
if UPDATING then
prc_ins_syshist( ‘FILM‘ ,‘U‘, :new.film_id);
end if;
if DELETING then
prc_ins_syshist( ‘FILM‘ ,‘D‘, :old.jahr,:old.genre);
end if;
Triggertypen
• Zeilentrigger werden für jeden Datensatz, den die DML Operation einfügt, verändert oder löscht einmal aktiviert
• Anweisungstrigger sind unabhängig von den Attributwerten
der einzelnen Datensätze und reagieren nur auf die
durchzuführende DML – Anweisung
Anwendungsbeispiel Trigger
• über Anweisungstrigger lassen sich Berechtigungen im
Mehrbenutzerbetrieb realisieren
• durch einen BEFORE - Anweisungstrigger, der z.B. einen
Semaphor implementiert, können kritische Tabellenbereiche
geschützt werden
• so können z.B. Dirty - Reads verhindert werden, da immer nur
ein Nutzer kritische Tabelleninhalte verändern kann
SQL – Constraints
• SQL – Constraints sind direkt an Spalten in Tabellen gebunden
und werden bei Erzeugung einer Tabelle mit dem Schlüsselwort
CONSTRAINT definiert
CREATE table personal (
pnr
Personalnummer,
ght
Gehalt,
PRIMARY KEY (pnr),
CONSTRAINT ght > 5000,
)
• Constraints haben keine ‘Programmeigenschaften‘
Constraints vs. Trigger
• reguläre Constraints haben keine 'Programmelemente', reine
atomare Prüfungen
• Trigger können auch zur Integritätsprüfung verwendet werden,
sind aber wesentlich mächtiger als Constraints
• es ist umstritten, ob man Trigger zur Integritätssicherung
einsetzen sollte oder nicht
Quellen und Literatur
• Heuer, Saake : Datenbanken: Konzepte und Sprachen (c) 2000 mitp Verlag
• Türscher : PL/SQL (c) 1997 Springer – Verlag
• http://www.orafaq.com
• http://www.oracle.com
• DIS – Skript 2003 N. Ritter, Uni – Hamburg
• VSS – Skript 2003 W.Lamersdorf / G.Gryczan, Uni – Hamburg
• Oracle / SQL – Tutorial http://www.db.cs.ucdavis.edu University of California
Herunterladen