В Oracle Database, NVL2()
функцията ни позволява да заменим нулеви стойности с друга стойност.
Той е подобен на NVL()
функция, с изключение на това, че приема три аргумента вместо два. Това ни позволява да посочим различна стойност, която да върнем, в случай че първият аргумент не е нулев.
Синтаксис
Синтаксисът е така:
NVL2(expr1, expr2, expr3)
Ако expr1
не е нула, тогава NVL2
връща expr2
. Ако expr1
е нула, след това NVL2
връща expr3
.
Пример
Ето пример за демонстрация:
SELECT NVL2(null, 2, 3)
FROM DUAL;
Резултат:
3
Първият аргумент беше нулев и така беше върнат третият аргумент.
И ето какво се случва, когато първият аргумент не е нулев:
SELECT NVL2(1, 2, 3)
FROM DUAL;
Резултат:
2
Когато заместващите стойности са нула
Ако вторият или третият аргумент е нулев, тогава може да получите резултат нулев.
Пример:
SET NULL '(null)';
SELECT
NVL2(1, null, 3) AS "r1",
NVL2(null, 2, null) AS "r2"
FROM DUAL;
Резултат:
r1 r2 _________ _________ (null) (null)
По отношение на първия ред SET NULL '(null)';
, добавих този ред, така че моята SQLcl сесия да връща тази стойност, когато резултатът е нулев.
По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null
възниква в резултат на SQL SELECT
изявление.
Можете обаче да използвате SET NULL
за да посочите различен низ, който да бъде върнат (както направих тук).
Невалиден брой аргументи
Извикването на функцията без предаване на аргументи води до грешка:
SELECT NVL2()
FROM DUAL;
Резултат:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"
И предаването на твърде много аргументи също води до грешка:
SELECT NVL2(1, 2, 3, 4)
FROM DUAL;
Резултат:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"