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 Client DB Host Anwendung ohne gesicherte Prozedur: Anw. Programm DB Transaktion DB Server Datenbank Anwendung mit gesicherter Prozedur: Anw. Programm Transaktions aufruf DB Server DB Transaktion Datenbank Client DB Host Intelligentes Datenmanagement FH Bonn-Rhein-Sieg, SS 03 33
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 Client- Maschine 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 34 1. Datenbank-Programmierung 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 DB- System 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
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 36 1. Datenbank-Programmierung 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
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 38 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 SQL- Anweisungen 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
Aufbau in PL/SQL Aufbau eines PL/SQL-Skripts: 798 :<;>=<?98 @BADC EFAHGBIJLKM JON IHADCA PFE9QRKSJRK TFTFT U8<V WLX Y Z\[]_^ K*Ma` [HbFY Zc[ ]ed Kf9JFE>g ^ KFhSJRK TFTFT 8<i:D8\jHkW\lcX m9n o>jqprpfehqlk ]Ls AeK*MFItJcC TFTFT 8\Xt7 u Datentypen: Datentypen: Datentypen von SQL, Cursor, Strukturen, Felder Kontrollstrukturen: SQL- Anweisungen, Zuweisungen, if, loop, for, while, Exceptions Exceptions: vordefinierte und selbstdefinierte Exceptions Intelligentes Datenmanagement FH Bonn-Rhein-Sieg, SS 03 40 Zugriff auf Typinformationen im Deklarationsteil: v w, 3x ty{ztw ~} v tw, y-, ƒ x v 3x ty{ztw - z -y-, ˆ Cursor z -Loop: Hx { z Š* &! Œ - r y }}-} Œ }}-} r )*,+-. /! Š &r! - }-}} - 6 - }}-} v Intelligentes Datenmanagement FH Bonn-Rhein-Sieg, SS 03 41
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). für den Zu- Innerhalb der Schleife steht die Variable griff auf das aktuelle Tupel zur Verfügung. Œ Ž v w, Status eines Cursors kann abgefragt werden. Intelligentes Datenmanagement FH Bonn-Rhein-Sieg, SS 03 42 Einsatz von prozeduralen SQL-Erweiterungen in Verbindung mit: gesicherten Prozeduren * r -*y{ zr x š r* H!œ" +-./œž }-}} v }-}}Ÿ2 Œ- Trigger Packages v Œ v z v r -*y{ yr {Œ 3x ty{ztw y y x yztw z H z }-}} v v v r -*y{,r 3x yzw, { v rœ r rz x r 3x ty{ztw }}-} v rz x r - *y{ 3 x yzw, }-}} v v Intelligentes Datenmanagement FH Bonn-Rhein-Sieg, SS 03 43