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"