Jeśli jakikolwiek argument ma wartość NULL, chcesz wziąć najmniejszy z pozostałych argumentów. Jeśli wszystkie argumenty są NULL, chcesz zwrócić NULL.
Mógłbym użyć czegoś takiego dla dwóch argumentów:
LEAST(NVL(colA,colB), NVL(colB,colA))
Jednak zaczyna być brzydka dla>2 argumentów:
LEAST(COALESCE(colA,colB,colC)
,COALESCE(colB,colA,colC)
,COALESCE(colC,colA,colB))
W tym momencie zacznę rozważać wartości magiczne; ale może to być błędne (np. co, jeśli jedna z wartości zgodnie z prawem jest .) wartość magiczna?):
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));