Advanced MySQL - Zwischenspeicherung - Routinen - Variablen
1. Parameter
Jeder Prozedur oder Funktion kann eine beliebige Anzahl von Parametern übergeben werde. Dabei muss aber immer der Typ angegeben werden.
DELIMITER $
CREATE PROCEDURE bla(blubb INT, blubber VARCHAR(32))
BEGIN
SELECT * FROM laber WHERE id = blubb;
END$
DELIMITER ;
2. Rein und Raus
Sowohl bei den Funktionen als auch Prozeduren haben Parameter zunächst den Status IN
. Das heißt, die Werte sind innerhalb
der Routine verfügbar. Allerdings kann man, wie ich schon vorher sagte, auch bei Prozeduren Werte zurückgeben. In dem Fall muss
man den Parameter als OUT
festlegen
DELIMITER $
CREATE PROCEDURE countAddress (OUT num INT)
BEGIN
SELECT COUNT(*) INTO num FROM adresse;
END$
DELIMITER ;
CALL countAddress(@a);
SELECT @a;
und natürlich CALL
und SELECT
aufrufen. Ein Hinweis noch. Werte aus Abfragen schreibt man mit SELECT
... INTO
in Variablen;
INOUT
Ich persönlich halte diese Möglichkeit für etwas problematisch, ich zeige sie aber trotzdem. Mit INOUT
legt man fest,
dass zuerst der Wert eines Parameters in die Prozedur hineinkommt und dann als Rückgabewert genutzt wird.
DELIMITER $
CREATE PROCEDURE bla (INOUT num INT)
BEGIN
SELECT
(blubb + blubber) INTO num
FROM
laber
WHERE id = num;
END$
DELIMITER ;
CALL bla(1);
SELECT @a;
3. Variablen innerhalb von Routinen
Werden mit DECLARE
erzeugt. Die Werte selber werden mit SET
geschrieben. Auch hier muss jede Variable
einen eindeutigen Typ haben.
DELIMITER $
CREATE PROCEDURE blubb(bla)
BEGIN
DECLARE blubber VARCHAR(32);
SET blubber = bla;
END$
4. Variablen aus Funktionen zurückgeben
Hier gibt es im Gegensatz zu Prozeduren eine Besonderheit. Zunächst mal muss man mit RETURNS
festlegen, was zurückgegeben
werden soll. Und das geschieht dann mit RETURN
.
DELIMITER $
CREATE FUNCTION blubb (id INT)
RETURNS VARCHAR(255)
BEGIN
DECLARE blubber VARCHAR(255);
...
RETURN blubber;
END$
DELIMITER ;
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt