Matti Mäkitalo: Stored Function: Überladen oder optionale Parameter möglich?

Beitrag lesen

Hi,

Zunächst: ich nutze MySQL in verschiedenen Versionen, in Produktion ist eine MySQL v5.0.26, auf dem das ganze dann auch funktionieren sollte.

Ich habe tlw. das Problem, den größten aus einer festen Menge aus Werten zu ermitteln.
MySQL bietet dafür die Funktion GREATEST() an. Leider liefert diese NULL, wenn einer der übergebenen Werte NULL ist.

Um dies zu umgehen, habe ich mir eine Funktion geschrieben, welche das von mir gewünschte Verhalten (NULL "ignorieren") zeigt.

DROP FUNCTION IF EXISTS GREATEST_N_DATETIME;  
CREATE FUNCTION GREATEST_N_DATETIME(a DATETIME, b DATETIME) RETURNS DATETIME  
BEGIN  
	IF a IS NULL THEN  
		RETURN b;  
	ELSEIF b IS NULL THEN  
		RETURN a;  
	END IF;  
	-- now we can safely assume that both a and b are not NULL  
	RETURN GREATEST(a,b);  
END;

Nun geht das erstmal nur mit zwei Parametern, und auch nur für den von mir gewählten Datentyp (was erstmal sekundär ist, da ich es erstmal nur für DATETIMEs nutze).

Gibt es eine Möglichkeit, das ganze so generisch zu implementieren, dass es sowohl mit mehr Parametern geht und/oder mit anderen Datentypen aufrufbar ist?

Bei der Frage nach mehr Parametern wäre die Standard-Vorgehensweise in anderen Sprachen entweder die Funktion überladen oder Default-Werte für die "hinteren" Parameter vorgeben.

Beides scheint in Standard-SQL/MySQL-SQL nicht möglich.
Sieht irgendjemand einen Weg, wie ich es trotzdem schaffen könnte?

Bis die Tage,
Matti