W bazie danych Oracle NVL2()
funkcja pozwala nam zastąpić wartości null inną wartością.
Jest podobny do NVL()
funkcja, z tą różnicą, że przyjmuje trzy argumenty zamiast dwóch. To pozwala nam określić inną wartość do zwrócenia w przypadku, gdy pierwszy argument nie jest pusty.
Składnia
Składnia wygląda tak:
NVL2(expr1, expr2, expr3)
Jeśli expr1
nie ma wartości null, to NVL2
zwraca expr2
. Jeśli expr1
ma wartość null, to NVL2
zwraca expr3
.
Przykład
Oto przykład do zademonstrowania:
SELECT NVL2(null, 2, 3)
FROM DUAL;
Wynik:
3
Pierwszy argument miał wartość NULL, więc został zwrócony trzeci argument.
A oto, co się dzieje, gdy pierwszy argument nie jest pusty:
SELECT NVL2(1, 2, 3)
FROM DUAL;
Wynik:
2
Kiedy wartości zastępcze są zerowe
Jeśli drugi lub trzeci argument jest pusty, możesz otrzymać wynik pusty.
Przykład:
SET NULL '(null)';
SELECT
NVL2(1, null, 3) AS "r1",
NVL2(null, 2, null) AS "r2"
FROM DUAL;
Wynik:
r1 r2 _________ _________ (null) (null)
Odnośnie pierwszej linii SET NULL '(null)';
, dodałem ten wiersz, aby moja sesja SQLcl zwracała tę wartość, gdy wynik jest pusty.
Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null
występuje w wyniku polecenia SQL SELECT
oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia (tak jak zrobiłem tutaj).
Nieprawidłowa liczba argumentów
Wywołanie funkcji bez przekazywania jakichkolwiek argumentów skutkuje błędem:
SELECT NVL2()
FROM DUAL;
Wynik:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"
A przekazanie zbyt wielu argumentów również powoduje błąd:
SELECT NVL2(1, 2, 3, 4)
FROM DUAL;
Wynik:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"