Oracle
 sql >> база данни >  >> RDS >> Oracle

Разлики в Oracle между NVL и Coalesce

COALESCE е по-модерна функция, която е част от ANSI-92 стандартно.

NVL е Oracle специфично, той беше въведен в 80 е преди да има някакви стандарти.

В случай на две стойности те са синоними.

Те обаче се изпълняват по различен начин.

NVL винаги оценява и двата аргумента, докато COALESCE обикновено спира оценката, когато открие първия не-NULL (има някои изключения, като последователност NEXTVAL ):

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

Това работи за почти 0.5 секунди, тъй като генерира SYS_GUID() 's, въпреки 1 не е NULL .

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

Това разбира, че 1 не е NULL и не оценява втория аргумент.

SYS_GUID 's не се генерират и заявката е мигновена.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да експортирате данни с Oracle SQL Developer?

  2. Dynamic Oracle Pivot_In_Clause

  3. Oracle 11g - Как да оптимизираме избора на бавно паралелно вмъкване?

  4. Какво точно правят кавичките около името на таблицата?

  5. Вземете набор от резултати от съхранената процедура на Oracle