3 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
COALESCE
是更現(xiàn)代的功能,是ANSI-92
標(biāo)準(zhǔn)的一部分。
NVL
在Oracle
具體的,它在推出80
的前存在任何標(biāo)準(zhǔn)。
在兩個(gè)值的情況下,它們是同義詞。
但是,它們的實(shí)現(xiàn)方式不同。
NVL
總是計(jì)算兩個(gè)參數(shù),同時(shí)COALESCE
通常在找到第一個(gè)非結(jié)束時(shí)停止評(píng)估NULL
(有一些例外,例如序列NEXTVAL
):
SELECT SUM(val)FROM ( SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val FROM dual CONNECT BY level <= 10000 )
它運(yùn)行了幾0.5
秒鐘,因?yàn)樗闪?code>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
并且不評(píng)估第二個(gè)參數(shù)。
SYS_GUID
沒有生成,查詢是即時(shí)的。

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
NVL將隱式轉(zhuǎn)換為第一個(gè)參數(shù)的數(shù)據(jù)類型,因此以下內(nèi)容不會(huì)出錯(cuò)
select nvl('a',sysdate) from dual;
COALESCE期望一致的數(shù)據(jù)類型。
select coalesce('a',sysdate) from dual;
會(huì)拋出'不一致的數(shù)據(jù)類型錯(cuò)誤'
添加回答
舉報(bào)