Aufgabenverteilung

Teil 3: MySQL Stored Procedures

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.

© Archiv

Sie können innerhalb von Prozeduren natürlich auch auf SQL-Funktionen zurückgreifen.

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|

Mehr lesen

Chronologische Liste und Netflix-Links -

Neuerscheinungen in der Übersicht -

Vorschau auf Film- und Serien-Highlights -

Mehr zum Thema

Webdesign

Adobe Illustrator wird im Webdesign immer beliebter. Wie Sie das Tool richtig einsetzen, erfahren Sie hier.
Facebook

Was sind die Implikationen für Unternehmen und Endanwender bei Facebooks neuer Suche Graph Search?
Online-Recht

Allgemeine Geschäftsbedingungen liest sich niemand gerne durch. Sie sind jedoch notwendig und äußerst sinnvoll. Worauf sie achten sollten.
Online-Recht in der Cloud

Dateien werden immer häufiger in der Cloud bereitgestellt. Rechtlich ist das jedoch durchaus problematisch. Wir klären über das Urheberrecht in der…
E-Commerce-Logistik

Für den Erfolg eines Online-Shops sind zahlreiche Faktoren verantwortlich. Neben Produktvielfalt und Darstellung der Waren gehört auch die Logistik.