Aufgabenverteilung
MySQL Stored Procedures
MySQL 5 erlaubt die Nutzung von Stored Functions und Stored Procedures. Der Workshop zeigt, wie Sie Datenbankabfragen damit effizienter gestalten.
- MySQL Stored Procedures
- Teil 2: MySQL Stored Procedures
- Teil 3: MySQL Stored Procedures
- Teil 4: MySQL Stored Procedures
- Teil 5: MySQL Stored Procedures

Lange Zeit mussten die Anwender von MySQL neidisch auf die Nutzer von anderen Datenbanken schielen, bei denen Stored Functions und Stored Procedures bereits seit Langem zur Tagesordnung gehören. Seit Version 5.0 besteht jedoch kein Grund zur Eifersucht mehr.
Stored Procedures
Bei einer Stored Procedure handelt es sich um eine Prozedur, die auf dem Datenbankserver gespeichert wird. Bis zur Implementierung in MySQL mussten Sie als Entwickler die Funktionalität auf dem Webserver abspeichern und entweder an dieser Stelle oder dem Webclient ausführen. Heute haben Sie die Wahl, an welcher Stelle Sie die Funktion oder Prozedur speichern.
Die Datenbank als Speicherort bietet eine Reihe von Vorteilen: Wenn Sie mit einer heterogenen Umgebung arbeiten und unterschiedliche Clients zu bedienen haben, bietet es sich an, den Datenbank-spezifischen Code auf dem Datenbank-Server zu speichern. Damit erreichen Sie wenigstens für diesen Teil der Anwendung eine Plattformunabhängigkeit und müssen ihn nicht in verschiedenen Plattformen und teilweise unterschiedlichen Programmiersprachen vorhalten.
Ein weiteres Argument, das im Zusammenhang mit Stored Procedures und Stored Functions immer angebracht wird, ist der verringerte Netzwerk-Verkehr. Vom Client zum Server muss nur noch der Aufruf der Funktion, nicht aber die komplette Datenbank-Abfrage übertragen werden. Außerdem können auf Basis der Ergebnismenge - falls notwendig - bereits auf der Datenbank-Seite zusätzliche Aktionen durchgeführt werden, sodass nur noch die relevanten Daten an den Client zurück übertragen werden.
Es gibt jedoch nicht nur Vorteile, sondern auch ein entscheidendes Argument, dass beim Einsatz von Stored Procedures immer auch mit Betracht gezogen werden muss: Die Ausführung von Berechnungen auf dem Datenbankserver benötigt zusätzliche Ressourcen, welche dann eventuell an anderer Stelle fehlen.
Gerade bei einer Vielzahl von parallelen Zugriffen kann es auf dem Datenbank-Server zu einem Kapazitätsengpass kommen. Deswegen sollten Sie auch, bevor Sie die Prozeduren und Funktionen in einer hochfrequentierten Umgebung zum Einsatz bringen, ausführliche Lasttests durchführen.
Grundlagen
Die erste eigene Stored Procedure ist schnell erstellt. Nutzen Sie zum Zugriff auf Ihre MySQL-Datenbank entweder einen Telnet-Client oder die MySQL-Konsole. Geben Sie als Erstes den Befehl
CREATE PROCEDURE hallo() SELECT
'Hallo';
ein. Die Prozedur macht später nichts anderes, als das Wort Hallo auszugeben. Der Aufruf ist ebenso einfach. Sie benötigen lediglich den Befehl CALL in Verbindung mit dem Namen der Prozedur, also
CALL hallo()\G
Parameter
Natürlich kommt der wahre Vorteil von prozeduraler Entwicklung erst mit dem Einsatz von Übergabewerten zum Tragen. Mit Prozediesem geben Sie dem Aufruf der Prozedur bestimmte Variablen mit, die innerhalb des Bausteins weiterverarbeitet werden. Es gibt bei MySQL insgesamt drei Parameter:
• IN: Ein Wert wird in die Prozedur gegeben und kann dort geändert werden. Außerhalb der Prozedur bleibt der Wert unverändert. Dies ist der Standardparameter. • OUT: Es wird kein Wert an die Prozedur geliefert, es kann jedoch ein Wert zurückgeliefert werden. • INOUT: Dies fasst die beiden Eigenschaften von IN und OUT zusammen. Sie übergeben einen Wert an eine Prozedur, dieser wird dort verändert und wieder zurückgegeben.
Die unterschiedlichen Übergabeparameter werden in den folgenden Beispielen näher erläutert. Für die Beispiele wird eine Variable benötigt. Diese hat den Namen agent und trägt den Wert bond007. Legen Sie diese über die Kommandozeile oder die Konsole wie folgt fest:
SET @agent='bond007';
und prüfen Sie anschließend mit
SELECT @agent\G