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