PL/SQL & SQL CODING GUIDELINE 37 - Always use COALESCE instead of NVL, if parameter 2 of the NVL function is a function call or a SELECT statement

條款三十七,如果 NVL 第二個參數是 function 呼叫或是 select 語句,使用 COALESCE 取代 NVL。


這是因為 NVL 會先把每個可能的結果都先取出,儘管是根本不會出的結果,所以這樣會有不必要的 overhead。

1
2
SELECT NVL(dummy, function_call()) 
FROM dual;


建議的做法是用 COALESCE 取代 NVL,以避開這樣的問題。

1
2
SELECT COALESCE(dummy, function_call()) 
FROM dual;