sql >> Databáze >  >> RDS >> Oracle

Oracle Rozdíly mezi NVL a Coalesce

COALESCE je modernější funkce, která je součástí ANSI-92 standardní.

NVL je Oracle specifický, byl představen v 80 's dříve, než existovaly nějaké standardy.

V případě dvou hodnot se jedná o synonyma.

Jsou však implementovány odlišně.

NVL vždy vyhodnotí oba argumenty, zatímco COALESCE obvykle zastaví vyhodnocování vždy, když najde první neNULL (Existují některé výjimky, například sekvence NEXTVAL ):

SELECT  SUM(val)
FROM    (
        SELECT  NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
        FROM    dual
        CONNECT BY
                level <= 10000
        )

Toto běží za téměř 0.5 sekund, protože generuje SYS_GUID() 's, navzdory 1 není NULL .

SELECT  SUM(val)
FROM    (
        SELECT  COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
        FROM    dual
        CONNECT BY
                level <= 10000
        )

To znamená, že 1 není NULL a nevyhodnocuje druhý argument.

SYS_GUID 's nejsou generovány a dotaz je okamžitý.



  1. Migrace z MySQL na PostgreSQL – co byste měli vědět

  2. Seznam porovnávacích operátorů SQL Server

  3. Porovnání řetězců SQL, větší a menší než operátory

  4. Jak formátovat číslo s čárkou v Oracle