Upload
paley
View
34
Download
5
Embed Size (px)
DESCRIPTION
Stored Procedures in Datenbanken. Was sind stored procedures?. Gespeicherte Programmteile Datenbankobjekte Vom DB-Benutzer definiert Werden im DB-Server-Prozess ausgeführt Erweitern die Funktionalität des DBMS. Wozu sind Stored Procedures gut?. Erweiterung der Funktionalität von DBMSn - PowerPoint PPT Presentation
Citation preview
Stored Procedures in Datenbanken
Was sind stored procedures?
Gespeicherte Programmteile Datenbankobjekte Vom DB-Benutzer definiert Werden im DB-Server-Prozess ausgeführt Erweitern die Funktionalität des DBMS
Wozu sind Stored Procedures gut?
Erweiterung der Funktionalität von DBMSn wenn die Möglichkeiten von SQL nicht genügen
u. wenn eine Verarbeitung am Server sinnvoller ist
Trigger um die DB konsistent zu halten um mehr semantische Information zu definieren
Methoden von Objekten bei objekt-relationalen DBn
Wer bietet stored procedures?
Große DBMS bieten Stored Procedures, z. B. IBM DB2 Microsoft SQL-Server Oracle Caché ...
Stored Procedures werden nicht unterstützt von File-Server Datenbanken (z. B. Access) nicht kommerziellen Systemen (z. B. MySQL)
Aufruf und Ablauf von Stored Procedures
Client-Programm(z. B. JAVA, JDBC)
...CallableStatement cstmt =con.prepareCall ({?=CALL Reserv(?,?,?,?)});cstmt.setInt(1, KundenID);...cstmt.execute();...
DB-Server
Reserv(k integer, ...)beginif x > 10 then...SELECT * FROM Tab2 ......INSERT INTO Reservierung ......end;
Tab1
Tab2
Stored Procedures bei Oracle
Programmiersprache PL/SQL C, C++ und JAVA sind auch möglich PL/SQL ist typenstrenge
Programmiersprache Cursor verbinden SQL mit prozeduraler
Verarbeitung Besondere Konstrukte für Datenzugriff
for cursor loop Datensatztyp-Deklaration Collection-Typen
Stored Procedures bei Oracle: Aufbau
Deklarationsteil Deklaration von Variablen, Cursor,
Collections, ... Ausführungsteil
Programmierung des Algorithmus Transaktionssteuerung
Ausnahmebehandlung Reaktionen auf Fehler werden hier
zusammengefasst Damit wird GOTO vermieden
Beispiel Reservierung:Deklarationsteil
create or replace function Reserv (kid integer, aid integer, von date, bis date)return integer as
declare autozahl integer; z integer; tage integer; cursor c1 is Select * from Reservierung where ModellID = aid and ((Beginn >= von and Beginn <= bis) or (Beginn <= von and Ende >= von)); var_c c1%rowtype;
Beispiel Reservierung: Ausführungsteil
begin tage = bis - von; Select count(*) into autozahl from Auto where Modell = aid; For i in 0 .. tage loop z := autozahl; for var_c in c1 loop if von + i >= var_c.Beginn and von + i <= var_c.Ende then z := z - 1; end if; end loop; exit when z <= 0; end loop; if z <= 0 then return 0; else insert into Reservierung values (reservierungseq.nextval, kid, aid, von, bis); return 1; end if;end;/
Ausnahmebehandlung
Benutzerdefinierte Ausnahmendeclare ausnahme1 exception; ... begin ... raise ausnahme1 ...exception
when ausnahme1 then <aktion>end;
Daten-Ausnahmen (vordefiniert), z. B. when data_not_foundwhen max_open_cursors