Stored Functions (gespeicherte Funktionen) sind benannte SQL-Funktionen, die direkt in der Datenbank gespeichert und aus SQL-Ausdrücken heraus aufgerufen werden. Im Gegensatz zu Stored Procedures geben sie immer genau einen einzelnen Wert zurück und lassen sich überall dort verwenden, wo ein Ausdruck erlaubt ist — zum Beispiel in SELECT, WHERE oder ORDER BY.
Einfache Funktion anlegen
DELIMITER //
CREATE FUNCTION brutto(netto DECIMAL(10,2), satz DECIMAL(5,2))
RETURNS DECIMAL(10,2)
DETERMINISTIC
BEGIN
RETURN ROUND(netto * (1 + satz / 100), 2);
END //
DELIMITER ;
Aufruf wie eine eingebaute Funktion:
SELECT brutto(100.00, 19.00); -- ergibt 119.00
SELECT name, brutto(preis, 19) FROM artikel;
Wichtige Regeln
- RETURNS-Typ ist Pflicht: Der Rückgabetyp wird in der Deklaration festgelegt (INT, VARCHAR, DECIMAL, DATE …).
- Rückgabe immer mit
RETURN: Anders als Prozeduren, dieOUT-Parameter nutzen, liefert eine Funktion ihren Wert ausschließlich überRETURN. - DETERMINISTIC / NOT DETERMINISTIC:
DETERMINISTICheißt „gleiche Eingabe → gleiches Ergebnis“ und erlaubt dem Optimierer zusätzliche Optimierungen (z. B. in Indizes). Wer unsicher ist, deklariertNOT DETERMINISTIC. - SQL-Datenbank-Zugriff eingeschränkt: Funktionen dürfen in MySQL/MariaDB keine Daten ändern (kein INSERT/UPDATE/DELETE) — dafür sind Prozeduren oder Trigger da.
- Verwaltung:
SHOW CREATE FUNCTION brutto;zeigt den Code,DROP FUNCTION brutto;entfernt die Funktion.
Wofür sinnvoll?
Stored Functions kapseln wiederkehrende Berechnungen (Steuer, Rabatte, Formatierungen, Plausibilitätsprüfungen) zentral in der Datenbank. So bleibt die Logik an einer Stelle, statt in jeder Anwendung dupliziert zu werden. Vorsicht bei sehr komplexen Funktionen: Sie laufen in der DB und können Transaktionen verlängern; passende Indizes und kurze Ausführungen halten die Datenbank schnell. Verwandte Konzepte: Trigger reagieren automatisch auf Datenänderungen, Stored Procedures bündeln ganze Abläufe.