MySQL Stored Procedures in PhpMyAdmin

MySQL Stored Procedures sind möglich! Auf den ersten Blick wirkt MySQL mit dem PhpMyAdmin gegenüber eines Microsoft SQL Server und dessen Client Programms sehr billig. Tatsächlich hat MySQL mehr unter der Haube als angenommen. So musste ich kürzlich erst lernen, dass MySQL auch Stored Procedures unterstützt. Leider unterstützt PhpMyAdmin diese nicht. Man kann sie zwar über SQL erstellen löschen usw. jedoch gibt es keinen Menüpunkt, damit man auch übersichtlich damit arbeiten kann.

MySQL Stored Procedures

MySQL Stored Procedures anzeigen

In PhpMyAdmin gibt es leider keinen Menüpunkt der die MySQL Stored Procedures einer Datenbank anzeigt. Die einzige Mögllichkeit die uns bleibt ist eine SQL Abfrage. Dabei gibt es mehrere Dinge die uns vielleicht interessieren:

  • Liste von allen Stored Procedures aller Datenbanken auf die der Benutzer Zugriff hat
  • wem die Liste zu lang ist kann hier die Auswahl auf eine Datenbank begrenzen
  • mit dem Like Operator können wir genauer suchen

Kennt man den Namen einer Stored Procedure, so kann man sich auch dessen Create Statement anzeigen lassen. Das geht mit folgendem Statement:

Eine einfache MySQL Stored Procedure

Angenommen wir haben eine Tabelle books mit mehreren Spalten. Darunter einen Primärschlüssel (in_id), eine Spalte für den EAN Code des Buches (in_EAN) und eine Spalte die angibt, ob das Buch auf deutsch ist oder nicht (in_DE). Da unser Import jedoch nicht weiß, ob ein Buch auf deutsch ist, müssen wir diese Information aus einer anderen Spalte generieren. Wenn das 4. Zeichen im EAN Code eine 3 ist, so ist das Buch auf deutsch.

Soweit zur Theorie. Um die Spalte in_DE bei jedem Update oder Insert der Tabelle zu füllen benötigen wir eine stored procedure die bei jedem Update oder Insert automatisch aufgerufen wird. Anbei der Code für den Update:

Wenn wir nun versuchen diesen Code im SQL Bereich auszuführen enden wir mit einer Fehlermeldung.

Das Problem mit dem Delimeter

Warum geht das oben genannte Beispiel nicht? Nach langem Suchen bin ich in irgend einem Forum fündig geworden. SQL Statements sind normalerweise einzeilig. Sie enden mit einem ‚;‘. Unser Statement ist viel länger und enthält ein ‚;‘ mitten im Text. Der SQL Interpreter erkennt den ‚;‘ als Zeilenende und vermisst nun das Ende des Statements (END).

Die Lösung ist hier denkbar einfach: das SQL Textfeld in PhpMySql hat ein kleines unscheinbares Textfeld am unteren Rand genannt Delimeter. Dort steht standardmäßig ‚;‘. Den müssen wir auf ein anderes Zeichen ändern und das andere Zeichen in unserem Statement einbauen (zum Beispiel ein ‚//‘). Das korrigierte Statement sieht so aus:

Zwecks Vollständigkeit hier auch noch die Insert Stored Procedure (so legt man MySQL Stored Procedures an):

Weitere Informationen kann man hier finden.

Fazit

MySQL Stored Procedures sind ein guter Weg um Logik aus einem PHP Programm in die Datenbank zu implementieren. Meistens bietet ein solches Vorgehen eine Performanceverbesserung. MySQL unterstützt Stored Procedures wie auch viele andere vor allem kommerzielle SQL Datenbanken und braucht sich nicht hinter der Konkurrenz zu verstecken.

War dieser kurze Artikel hilfreich? Wofür verwendet ihr stored procedures?

(Visited 583 times, 1 visits today)

Das könnte auch interessant sein...

2 Antworten

  1. Hans sagt:

    Kann ich die Datenbank auch f ür das Rechnungsprogramm von Successcontrole verwenden, oder wo liegt da der Unterschied?

  2. Ich kenne das Rechnungsprogramm nicht, aber MySQL kann man so gut wie für alle Anwendungen einsetzen!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.