Различия Oracle между NVL и объединяют

Другим способом изменения размера маркеров будет:

  1. Отключение маркеров в целом
  2. Повторное добавление пользовательских маркеров с помощью псевдоэлемента ::before .

Пример:

ul {
  list-style-type: none;
}

li::before {
  display:          inline-block;
  vertical-align:   middle;
  width:            5px;
  height:           5px;
  background-color: #000000;
  margin-right:     8px;
  content:          ' '
}
<ul>
  <li>first element</li>
  <li>second element</li>
</ul>

Не требуется никаких изменений разметки

195
задан Vadzim 8 November 2015 в 21:18
поделиться

2 ответа

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 () , несмотря на то, что 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 не генерируются, и запрос выполняется мгновенно. 1136049]

294
ответ дан 23 November 2019 в 05:21
поделиться

NVL сделает неявное преобразование в тип данных первого параметра,

166
ответ дан 23 November 2019 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: