Om något argument är NULL, vill du ta minsta möjliga av de andra argumenten. Om alla argument är NULL vill du returnera NULL.
Jag kan använda något liknande detta för två argument:
LEAST(NVL(colA,colB), NVL(colB,colA))
Det börjar bli fult för>2 argument dock:
LEAST(COALESCE(colA,colB,colC)
,COALESCE(colB,colA,colC)
,COALESCE(colC,colA,colB))
Då skulle jag börja överväga magiska värden; men det här kan vara buggigt (t.ex. om ett av värdena legitimt är det magiska värdet?):
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));