1. Datenbank-Programmierung Gesicherte Prozeduren Gesicherte Prozeduren Wenn eine Anwendung auf einer Client-Maschine läuft, wird normalerweise – jede SQL-Anweisung einzeln vom Client an den Server gesandt, und – jedes Ergebnistupel wird einzeln zurückgeliefert. Oft hat man jedoch Operationen innerhalb einer Anwendung, die eine hohe Last auf der Datenbank erzeugen und eine geschlossene Einheit ohne Benutzerinteraktion darstellen. Für solche Operationen ist es sinnvoll, sie auf der Server-Maschine als sogenannte gesicherte Prozedur (stored procedure) abzulegen und sie durch eine einzelne Nachricht vom Client aus aufzurufen. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 32 1. Datenbank-Programmierung Gesicherte Prozeduren DB−Host Client Anw.−Programm DB−Server Datenbank DB−Transaktion Anwendung ohne gesicherte Prozedur: Anw.−Programm DB−Server Datenbank DB−Transaktion Anwendung mit gesicherter Prozedur: Transaktions− aufruf Client Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 DB−Host 33 1. Datenbank-Programmierung Gesicherte Prozeduren Eine vollständige Anwendung mit einer gesicherten Prozedur hat stets zwei Teile: – Die Prozedur selbst, die auf der Servermaschine läuft, und – das eigentliche Anwendungsprogramm, das auf der ClientMaschine läuft. Anwendungen mit gesicherten Prozeduren haben die Restriktion, daß: – sämtliche Eingabedaten zum Zeitpunkt des Aufrufs vom Anwendungsprogramm an die gesicherte Prozedur übergeben werden müssen, und daß – Ergebnisdaten erst dann an das Anwendungsprogramm zurückgegeben werden, wenn die Prozedur vollständig abgearbeitet wurde. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 1. Datenbank-Programmierung 34 Gesicherte Prozeduren Während der Prozedurausführung ist keine Interaktion zwischen Anwendungsprogramm und gesicherter Prozedur möglich. Man kann gesicherte Prozeduren typischerweise in jeder vom DBSystem unterstützten Wirtssprache schreiben. Häufig kommen hierfür prozedurale SQL-Erweiterungen zum Einsatz, beispielsweise PL/SQL (Oracle). Aspekte von gesicherten Prozeduren: – Implementierung (Server) – Deklaration (Server) – Nutzung (Client) Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 35 1. Datenbank-Programmierung Gesicherte Prozeduren Nutzung von gesicherten Prozeduren (DB2) Eine gesicherte Prozedur wird von einem Anwendungsprogramm aufgerufen mit ! "$#%&'()*,+-./0 1-11 2 4356-6 -Anweisungen sind nur als statisches SQL möglich. Der Prozedurname kann als Konstante oder über eine Wirtsvariable angegeben werden. Konstanten als Parameter sind nicht erlaubt. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 1. Datenbank-Programmierung 36 Gesicherte Prozeduren Die Parameter müssen Indikator-Variablen aufweisen. Parameter können sein: – Eingabeparameter – Ausgabeparameter – Sowohl Eingabe- als auch Ausgabeparameter Dies wird bei der Deklaration der gesicherten Prozedur definiert. Die SQLCA zeigt Erfolg oder Fehler bei der Prozedurausführung an. Implementierung und Deklaration von gesicherten Prozeduren ☞ siehe nächstes Kapitel Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 37 1. Datenbank-Programmierung Gesicherte Prozeduren Vorteile von gesicherten Prozeduren Effizienz Ausführung der Prozeduren unter Kontrolle des DBMS Strukturierungsmittel für größere Anwendungen zentrale Kontrollen der Prozeduren, redundanzfreie Darstellung relevanter Aspekte der Anwendungsfunktionalität ☞ einfache Wiederverwendbarkeit Rechtevergabe für Prozeduren Aktive Aspekte: gesicherte Prozeduren im Aktionsteil von Triggern Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 1. Datenbank-Programmierung 38 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 der SQLAnweisungen ☞ bekannteste Variante: PL/SQL von Oracle Ausführung der Programme immer im Datenbank-Server Zugriff auf Typinformation der Datenbank Integration des Cursor-Konzeptes in Kontrollstrukturen Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 39 1. Datenbank-Programmierung Prozedurale SQL-Erweiterungen Aufbau in PL/SQL Aufbau eines PL/SQL-Skripts: 798 :<;>=<?98 @BADCEFAHGBIJLKM JONIHADCA PFE9QRKSJRK TFTFT U8<VWLX YZ\[]_^ K*Ma` [HbFYZc[]ed Kf9JFE>g ^ KFhSJRK TFTFT 8<i:D8\jHkW\lcX m9no>JqprPFEHQLK ]Ls AeK*MFItJcC TFTFT 8\Xt7u Datentypen: Datentypen: Datentypen von SQL, Cursor, Strukturen, Felder Kontrollstrukturen: SQLAnweisungen, Zuweisungen, if, loop, for, while, Exceptions Exceptions: vordefinierte und selbstdefinierte Exceptions Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 40 1. Datenbank-Programmierung Prozedurale SQL-Erweiterungen Zugriff auf Typinformationen im Deklarationsteil: 3xty{ztw|~} v tw,y-, v w, x v 3xty{ztw|-|z-y-, Cursor z | -Loop: | Hx|{z| *& ! - ry }}-} v }}-} r )*,+-./ ! &r ! }-}} -6 - }}-} v Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 6 - 41 1. Datenbank-Programmierung Prozedurale SQL-Erweiterungen Der Cursor wird unmittelbar vor Ausführung der for-Schleife geöffnet und nach dem Verlassen automatisch geschlossen. Pro Schleifentupel wird ein Tupel verarbeitet (kein explizites fetch notwendig). Innerhalb der Schleife steht die Variable | v w, für den Zugriff auf das aktuelle Tupel zur Verfügung. Status eines Cursors kann abgefragt werden. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 1. Datenbank-Programmierung 42 Prozedurale SQL-Erweiterungen Einsatz von prozeduralen SQL-Erweiterungen in Verbindung mit: gesicherten Prozeduren Trigger Packages *|r-*y{|zr x| r*H!"+-./ }-}} v }-}}2- |r-*y{ yr|{| v 3xty{ztw| y| v |y z v xyztw| z| H¡ |z }-}} v |r-*y{,r 3xyzw,|¢{ v r v r |rz x|r v 3xty{ztw| }}-}£ v |rz x|r - *y{3xyzw,| }-}}¤ v v Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 43