Se un argomento è NULL, vuoi prendere il minimo degli altri argomenti. Se tutti gli argomenti sono NULL, vuoi restituire NULL.
Potrei usare qualcosa del genere per due argomenti:
LEAST(NVL(colA,colB), NVL(colB,colA))
Tuttavia, inizia a diventare brutto per>2 argomenti:
LEAST(COALESCE(colA,colB,colC)
,COALESCE(colB,colA,colC)
,COALESCE(colC,colA,colB))
A quel punto inizierei a considerare i valori magici; ma questo può essere difettoso (ad esempio cosa succede se uno dei valori legittimamente è il valore magico?):
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));