В SQL Server мы можем ввести IsNull()
, чтобы определить, является ли поле нулевым. Есть ли эквивалентная функция в PL/SQL?
coalesce
поддерживается как в Oracle, так и в SQL Server и выполняет по существу ту же функцию, что и nvl
и isnull
. (Есть несколько важных отличий, coalesce
может принимать произвольное количество аргументов и возвращает первый ненулевой. Тип возврата для isnull
соответствует типу первого аргумента, что неверно для coalesce
, по крайней мере, на SQL Server.)
Вместо ISNULL()
используйте NVL()
.
T-SQL:
SELECT ISNULL(SomeNullableField, 'If null, this value') FROM SomeTable
PL/SQL:
SELECT NVL(SomeNullableField, 'If null, this value') FROM SomeTable
Также используйте NVL2
, как показано ниже, если вы хотите вернуть другое значение из field_to_check
:
NVL2( field_to_check, value_if_NOT_null, value_if_null )
Использование: ORACLE/PLSQL: ФУНКЦИЯ NVL2
Вы можете использовать условие if x is not null then...
. Это не функция. Там также функция NVL()
, хороший пример использования здесь: функция NVL ref.
COALESCE
- это ANSI, поддерживаемый Postgres, MySQL ... Единственное предостережение в том, что он не обязательно работает так же быстро, как собственный синтаксис.COALESCE
, который имеет одно важное преимущество передNVL
: он выполняет ускоренную оценку, тогда какNVL
всегда оценивает оба параметра. СравнитеCOALESCE(1,my_expensive_function)
сNVL(1,my_expensive_function)
.