• Es gibt nur IN Parameter, diese müssen nicht mit IN gekennzeichnet werden
  • Die Funktion selbst muss einen einzelnen Wert zurückgeben, dessen Typ im Header der Funktion definiert ist.
  • Funktionen können in SQL-Anweisungen aufgerufen werden.
  • Eine Funktion gibt möglicherweise keine Ergebnismenge zurück

Unterschied Stored Procedure <-> Stored Function


Stored FunctionStored Procedure
RückgabewertGenau einen Wert (RETURN)Keinen, einen oder mehrere (via OUT-Parameter)
AufrufSELECT myFunction()CALL myProcedure()
OUT / INOUT ParameterNeinJa
Transaktionen (COMMIT, ROLLBACK)NeinJa
Fehlerbehandlung (SIGNAL, Handler)EingeschränktVoll unterstützt
Mehrere Resultsets zurückgebenNeinJa (mehrere SELECTs)
Charakteristiken im HeaderPflichtOptional

Definition


DELIMITER || 
CREATE FUNCTION <FunctionName> (<variable> <Datatype>[, ...]) 
[RETURNS <Datentyp>]
[NOT] DETERMINISTIC 
[CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA]
[SQL SECURITY DEFINER | INVOKER]
[COMMENT 'Text']
BEGIN
	#Code 
	[RETURN <Value>; ]
END || 
DELIMITER ;

Charakteristiken

Deterministic

Gibt an, ob die Funktion bei gleichen Eingabewerten immer dasselbe Ergebnis liefert.

KeywordBedeutung
DETERMINISTICGleiche Parameter → immer gleiches Ergebnis
NOT DETERMINISTICErgebnis kann variieren (z. B. wegen NOW(), RAND(), Tabellenzugriff)

Datenzugriffs Charakteristik

NO SQL

Die Funktion enthält keinerlei SQL-Statements – nur reine Logik (Berechnungen, String-Operationen etc.).

CREATE FUNCTION addiere(a INT, b INT) 
RETURNS INT
NO SQL DETERMINISTIC
RETURN a + b;

CONTAINS SQL

(Standard, wenn nichts angegeben)_

Die Funktion enthält SQL, aber liest oder schreibt keine Daten

SET @var = 1

READS SQL DATA

Die Funktion liest Daten aus Tabellen (SELECT), verändert aber nichts.

CREATE FUNCTION get_name(id INT) RETURNS VARCHAR(100)
READS SQL DATA NOT DETERMINISTIC
BEGIN
  DECLARE result VARCHAR(100);
  SELECT name INTO result FROM kunden WHERE kunden_id = id;
  RETURN result;
END;

MODIFIES SQL DATA

Die Funktion schreibt in Tabellen (INSERT, UPDATE, DELETE).

Achtung: In Stored Functions ist das erlaubt, aber mit Einschränkungen – z. B. nicht überall aufrufbar (nicht in SELECT direkt).

SQL SECURITY

Legt fest, mit wessen Rechten die Funktion ausgeführt wird:

KeywordBedeutung
DEFINER (Standard)Läuft mit den Rechten des Erstellers der Funktion
INVOKERLäuft mit den Rechten des aufrufenden Users

Aufruf


SELECT <FunctionName>([paramValue])

Löschen


DROP FUNCTION [IF EXISTS] <FunctionName>;