COALESCE
to bardziej nowoczesna funkcja, która jest częścią ANSI-92
standardowe.
NVL
to Oracle
konkretnie, został wprowadzony w 80
zanim pojawiły się jakiekolwiek standardy.
W przypadku dwóch wartości są to synonimy.
Jednak są one zaimplementowane w inny sposób.
NVL
zawsze ocenia oba argumenty, podczas gdy COALESCE
zwykle zatrzymuje ocenę, gdy znajdzie pierwszy inny niż NULL
(jest kilka wyjątków, takich jak sekwencja NEXTVAL
):
SELECT SUM(val)
FROM (
SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Działa to prawie przez 0.5
sekund, ponieważ generuje SYS_GUID()
, pomimo 1
nie będąc NULL
.
SELECT SUM(val)
FROM (
SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Rozumie, że 1
nie jest NULL
i nie ocenia drugiego argumentu.
SYS_GUID
's nie są generowane, a zapytanie jest natychmiastowe.