sql >> Database teknologi >  >> RDS >> Oracle

Oracle Forskelle mellem NVL og Coalesce

COALESCE er mere moderne funktion, der er en del af ANSI-92 standard.

NVL er Oracle specifik, den blev introduceret i 80 før der var nogen standarder.

I tilfælde af to værdier er de synonymer.

De implementeres dog anderledes.

NVL evaluerer altid begge argumenter, mens COALESCE stopper normalt evalueringen, når den finder den første ikke-NULL (der er nogle undtagelser, såsom sekvens NEXTVAL ):

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

Dette kører i næsten 0.5 sekunder, da den genererer SYS_GUID() 's, på trods af 1 er ikke en NULL .

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

Dette forstår, at 1 er ikke en NULL og evaluerer ikke det andet argument.

SYS_GUID 's genereres ikke, og forespørgslen er øjeblikkelig.



  1. Oracle Entity Framework - Generer enhed fra tabeller i forskellige skemaer

  2. Big Data med PostgreSQL og Apache Spark

  3. Endnu en grund til at undgå sp_updatestats

  4. NLS_LOWER() Funktion i Oracle