Zum Inhalt springen
Der Guide für ein smartes Leben.
Aufgabenverteilung

Teil 3: MySQL Stored Procedures

Autoren: Redaktion pcmagazin und Andreas Hitzig • 18.3.2009 • ca. 1:45 Min

Komplexere Abfragen Damit haben Sie die Rahmendaten für eine Stored Procedure, die es nun gilt, mit Leben zu füllen. Für die nächsten Abfragen reicht eine normale Variable nicht mehr aus....

Komplexere Abfragen

Damit haben Sie die Rahmendaten für eine Stored Procedure, die es nun gilt, mit Leben zu füllen. Für die nächsten Abfragen reicht eine normale Variable nicht mehr aus.

MySQL Stored Procedures
Sie können innerhalb von Prozeduren natürlich auch auf SQL-Funktionen zurückgreifen.
© Archiv

Deswegen sollten Sie sich eine Tabelle bsp1 anlegen mit zwei Feldern: einem Schlüssel ident, der auch Primärschlüssel ist und einem Textfeld info mit 20 Zeichen.

CREATE TABLE bsp1 (ident INT, info
VARCHAR(20), PRIMARY KEY(ident));

Bevor Sie mit der Erstellung Ihrer ersten größeren Prozedur beginnen können, müssen Sie noch ein Zeichen als Trennzeichen festlegen. Dies ist notwendig, weil MySQL auch bei der Definition einer Prozedur beim Abschluss der Datenbankabfrage ein Semikolon erwartet, zu diesem Zeitpunkt jedoch die Prozedur nicht abgeschlossen ist.

Aus diesem Grund müssen Sie sich mit einem Trennzeichen - einem sogenannten delimiter - behelfen. Oftmals wird für diesen Zweck die vertikale Linie [ALTGR + <] gewählt und über

Delimiter |

gesetzt.

Die Prozedur macht nichts anderes, als die Länge der übergebenen Zeichenkette zu ermitteln und diese der Variablen @a zuzuweisen. Die zweite Variable @b erhält einfacherweise nur den übergebenen Text. Diese beiden Daten werden in die Tabelle bsp1 eingefügt. Die resultierende Prozedur sieht dann wie folgt aus:

CREATE PROCEDURE bsp1_p
(p VARCHAR(20))
BEGIN
SET @a=CHAR_LENGTH(p);
SET @b=p;
INSERT INTO bsp1(ident, info)
VALUES(@a, @b);
END|

Der Aufruf erfolgt wie gewohnt über den Prozedurnamen zusammen mit dem Übergabewert, also beispielsweise CALL bsp1_p('FCBAYERN');

Wie Sie bei der Eingabe sicherlich bemerkt haben, verlangt MySQL immer noch nach der Eingabe den Delimiter als Abschlusszeichen und akzeptiert nicht das Semikolon. Setzen Sie einfach den Wert für das Trennzeichen wieder auf den Ursprungswert zurück über

delimiter ;

und Sie können anschließend auch wieder alle Abfragen wie gewohnt ausführen.

Lokale Variablen

Bis jetzt sind nur globale Session-Variablen zum Einsatz gekommen, auf diese aus jedem Kontext zugreifen können. Gerade bei Prozeduren ist es jedoch oftmals notwendig, lokale Variablen zu definieren, die auch nicht global gültig sind. Dies verwenden Sie den Schlüsselbegriff DECLARE und verzichten beim Bezeichner der Variable auf das @-Zeichen.

Im folgenden Beispiel wird wieder die Länge des übergebenen Texts berechnet und anschließend über die Hilfsvariable tmp dieser Wert verdreifacht und anschließend als Schlüssel für die Tabelle bsp1 verwendet.

CREATE PROCEDURE bsp2_p
(p VARCHAR(20))
BEGIN
DECLARE tmp INT;
SET tmp=CHAR_LENGTH(p);
SET tmp=tmp*3;
INSERT INTO bsp1(ident, info)
VALUES(tmp, p);
END|