慕碼人8056858
COALESCE是更現代的功能,是ANSI-92標準的一部分。NVL在Oracle具體的,它在推出80的前存在任何標準。在兩個值的情況下,它們是同義詞。但是,它們的實現方式不同。NVL總是計算兩個參數,同時COALESCE通常在找到第一個非結束時停止評估NULL(有一些例外,例如序列NEXTVAL):SELECT??SUM(val)FROM????(
????????SELECT??NVL(1,?LENGTH(RAWTOHEX(SYS_GUID())))?AS?val????????FROM????dual????????CONNECT?BY
????????????????level?<=?10000
????????)它運行了幾0.5秒鐘,因為它生成了SYS_GUID(),盡管1不是NULL。SELECT??SUM(val)FROM????(
????????SELECT??COALESCE(1,?LENGTH(RAWTOHEX(SYS_GUID())))?AS?val????????FROM????dual????????CONNECT?BY
????????????????level?<=?10000
????????)這理解1不是NULL并且不評估第二個參數。SYS_GUID沒有生成,查詢是即時的。