Wenn ein Argument NULL ist, möchten Sie das kleinste der anderen Argumente nehmen. Wenn alle Argumente NULL sind, möchten Sie NULL zurückgeben.
Ich könnte so etwas für zwei Argumente verwenden:
LEAST(NVL(colA,colB), NVL(colB,colA))
Für>2 Argumente wird es jedoch hässlich:
LEAST(COALESCE(colA,colB,colC)
,COALESCE(colB,colA,colC)
,COALESCE(colC,colA,colB))
An diesem Punkt würde ich anfangen, über magische Werte nachzudenken; aber das kann fehlerhaft sein (z. B. was ist, wenn einer der Werte rechtmäßig ist der magische Wert?):
SELECT CASE WHEN r = maxv THEN NULL ELSE r END AS result
FROM (SELECT LEAST(NVL(:colA,maxv)
,NVL(:colB,maxv)
,NVL(:colC,maxv)) AS r, maxv
FROM (SELECT 9.999999999999999999999999999999999999999e125
AS maxv FROM DUAL));