Hauptmenü

Untermenü

Advanced MySQL - Zwischenspeicherung - Routinen

1. Ein Wunder, ein Wunder

Und nein, ich werde euch jetzt nicht auf den Fuß treten. Denn hier geht es in der Tat um etwas Erstaunliches. Man kann in MySQL echte Funktionen (FUNCTION) programmieren. Oder Prozeduren (PROCEDURE). Der grundsätzliche Unterschied ist der, dass Funktionen einen Wert zurückgeben, Prozeduren dagegen (normalerweise) nicht. Darum führt man sie unter dem Begriff Routinen. Wichtig ist noch, dass beide dauerhaft(!) auf dem Server gespeichert werden.

Sinn und Zweck

2. Der grundsätzliche Aufbau

Stored Functions


CREATE FUNCTION blubb()
  RETURNS ...
  BEGIN
    ...
  END;

Stored Procedures


CREATE PROCEDURE blubber()
  BEGIN
    ...
  END;

Unterschiede

Stored Functions geben immer nur einen einzigen Wert zurück. Stored Procedures dagegen gar nichts, einen oder mehrere Werte. Außerdem können sie auch mehrere Datensätze zurückliefern. Allerdings davon immer nur ein Feld.

Anwendung

Stored Functions werden gewöhnlich genommen, um zum Beispiel eindeutige IDs zu bekommen. Stored Procedures dagegen setzt man sehr gerne ein, um Werte in eine Datenbank zu schreiben. Das ist aber nur eine sehr grobe Unterscheidung.

3. Der Aufruf

Stored Function


SELECT FROM blubb();

Stored Procedure


CALL blubber();

Manchmal können auch Prozeduren etwas zurückgeben. In so einem Fall muss man CALL mit SELECT kombinieren.


CALL blubber();
SELECT FROM blubber();

4. Der Delimiter

Damit begrenzt man eine Routine. Oder genauer gesagt, man beendet sie damit. Die Standardvorgabe ist normalerweise das Semikolon. Jetzt kann es aber passieren, dass das innerhalb einer Anweisung gesetzt werden muss. Und dann weiß MySQL nicht, wann die Routine zu Ende ist. In so einem Fall muss man definitiv den Delimiter ändern.


DELIMITER $
CREATE PROCEDURE blubb()
  BEGIN
    ...
  END$
DELIMITER ;

Ach ja, nach der Routine sollte man tunlichst den Standard mit DELIMITER ; wiederherstellen.

Ein Hinweis

Bei der Wahl des Delimiters sollte man auf wenige Zeichen zurückgreifen, um später keine Konflikte mit Abfragen auszulösen. Besonders beliebt sind das Dollarzeichen (auch gedoppelt als $$) und der doppelte Schrägstrich (//). Auch die so genannte Pipe sieht man das eine oder andere Mal (|). Der Lattenzaun # dagegen ist ein echtes no-go, da das Zeichen für Kommentare verwendet wird.

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