sql >> Databasteknik >  >> RDS >> Oracle

Oracle Skillnader mellan NVL och Coalesce

COALESCE är en modernare funktion som är en del av ANSI-92 standard.

NVL är Oracle specifikt introducerades det i 80 innan det fanns några standarder.

Om det finns två värden är de synonymer.

De implementeras dock annorlunda.

NVL utvärderar alltid båda argumenten, medan COALESCE stoppar vanligtvis utvärderingen när den hittar den första icke-NULL (det finns några undantag, som sekvensen NEXTVAL ):

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

Detta körs i nästan 0.5 sekunder, eftersom den genererar SYS_GUID() s, trots 1 är inte en NULL .

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

Detta förstår att 1 är inte en NULL och utvärderar inte det andra argumentet.

SYS_GUID s genereras inte och frågan är omedelbar.



  1. Hur skriver man en fråga som gör något som liknar MySQL:s GROUP_CONCAT i Oracle?

  2. Använda ODBC med Salesforce och OneLogin Single Sign On (SSO)

  3. Spara SQLite-frågeresultat till en textfil

  4. Automatisk ökning på partiell primärnyckel med Entity Framework Core