Ако някой аргумент е NULL, искате да вземете най-малкото от другите аргументи. Ако всички аргументи са NULL, искате да върнете NULL.
Може да използвам нещо подобно за два аргумента:
LEAST(NVL(colA,colB), NVL(colB,colA))
Все пак започва да става грозно за>2 аргумента:
LEAST(COALESCE(colA,colB,colC)
,COALESCE(colB,colA,colC)
,COALESCE(colC,colA,colB))
В този момент бих започнал да обмислям магически стойности; но това може да е бъг (напр. какво ще стане, ако една от стойностите законно е магическата стойност?):
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));