>-
條款三十八,如果 NVL 第二或第三個參數是 function 呼叫或是 select 語句,使用 CASE 取代 NVL2。
這是因為 NVL2 會先把每個可能的結果都先取出,儘管是根本不會出的結果,所以這樣會有不必要的 overhead。
SELECT NVL2(dummy, function_call(), function_call())
FROM dual;
建議的做法是用 CASE 取代 NVL2,以避開這樣的問題。
SELECT CASE
WHEN dummy IS NULL THEN function_call()
ELSE function_call()
END
FROM dual;