sql >> Database >  >> RDS >> Oracle

Oracle-verschillen tussen NVL en Coalesce

COALESCE is een modernere functie die deel uitmaakt van ANSI-92 standaard.

NVL is Oracle specifiek, het werd geïntroduceerd in 80 's voordat er normen waren.

In het geval van twee waarden zijn het synoniemen.

Ze worden echter anders geïmplementeerd.

NVL evalueert altijd beide argumenten, terwijl COALESCE stopt meestal de evaluatie wanneer het de eerste niet-NULL . vindt (er zijn enkele uitzonderingen, zoals volgorde NEXTVAL ):

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

Dit duurt bijna 0.5 seconden, omdat het SYS_GUID() . genereert 's, ondanks 1 geen NULL zijn .

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

Dit begrijpt dat 1 is geen NULL en evalueert het tweede argument niet.

SYS_GUID 's worden niet gegenereerd en de zoekopdracht is direct.



  1. Implementeer SQL Server AlwaysOn-beschikbaarheidsgroepen op Linux

  2. FOUT 2002 (HY000):Kan geen verbinding maken met lokale MySQL-server via socket '/var/run/mysqld/mysqld.sock' (2)

  3. Invoegen in meerdere tabellen in één query

  4. Room API - Hoe de recent ingevoegde gegenereerde id van de entiteit op te halen?