Hauptmenü

Untermenü

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 INTblubber 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 blubberINTO 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 INTRETURNS VARCHAR(255)
BEGIN
  DECLARE blubber VARCHAR(255);
  ...
  RETURN blubber;
END$
DELIMITER ;

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt