W Oracle NANVL() funkcja pozwala nam poradzić sobie z NaN wartości, określając inną liczbę, która ma zostać zwrócona w jej miejsce.
Działa to tak, że przyjmuje dwa argumenty. Jeśli pierwszym argumentem jest NaN (nie liczba), zwraca drugi argument. Jeśli pierwszym argumentem jest liczbę, to po prostu zwraca tę liczbę.
Zauważ, że ta funkcja jest przydatna tylko dla liczb zmiennoprzecinkowych typu BINARY_FLOAT lub BINARY_DOUBLE .
Składnia
Składnia wygląda tak:
NANVL(n2, n1) Każdy argument może być dowolnym numerycznym typem danych lub dowolnym nienumerycznym typem danych, który można niejawnie przekonwertować na numeryczny typ danych.
Przykład
Możemy wyprodukować NaN dzieląc zerową wartość zmiennoprzecinkową/podwójną przez zero:
SELECT 0f/0
FROM DUAL; Wynik:
0F/0 _______ NaN
Ale jeśli nie chcemy NaN do zwrócenia, możemy użyć NANVL() funkcja zwracająca inną wartość:
SELECT NANVL(0f/0, 0)
FROM DUAL; Wynik:
NANVL(0F/0,0) ________________ 0.0
Tutaj znowu, ale tym razem określamy inną wartość do zwrócenia w miejsce NaN :
SELECT NANVL(0f/0, 123)
FROM DUAL; Wynik:
NANVL(0F/0,123) __________________ 123.0
NaN Literał zmiennoprzecinkowy
Oracle udostępnia również kilka literałów zmiennoprzecinkowych dla sytuacji, których nie można wyrazić jako literał liczbowy. Należą do nich binary_float_nan która reprezentuje wartość typu BINARY_FLOAT dla którego warunek IS NAN jest prawdziwe, a binary_double_nan , który reprezentuje wartość typu BINARY_DOUBLE dla którego warunek IS NAN to prawda.
Oto przykład użycia tych literałów zmiennoprzecinkowych:
SELECT
NANVL(binary_double_nan, 0),
NANVL(binary_float_nan, 0)
FROM DUAL; Wynik:
NANVL(BINARY_DOUBLE_NAN,0) NANVL(BINARY_FLOAT_NAN,0) _____________________________ ____________________________ 0.0 0.0
Przekazywanie numeru
Jak wspomniano, jeśli pierwszy argument jest liczbą, to zwraca tę liczbę:
SELECT NANVL(33, 0)
FROM DUAL; Wynik:
NANVL(33,0)
______________
33 Argumenty nieliczbowe
Argumentami może być dowolny numeryczny typ danych lub dowolny nienumeryczny typ danych, który można niejawnie przekonwertować na numeryczny typ danych.
Oto przykład tego, co się dzieje, gdy argumenty nie spełniają tych kryteriów:
SELECT NANVL('Gosh', 'Dang')
FROM DUAL; Wynik:
Error starting at line : 1 in command -
SELECT NANVL('Gosh', 'Dang')
FROM DUAL
Error report -
ORA-01722: invalid number Argumenty zerowe
NANVL() zwraca null jeśli jakikolwiek argument jest null :
SET NULL 'null';
SELECT
NANVL(null, 16),
NANVL(1024, null),
NANVL(null, null)
FROM DUAL; Wynik:
NANVL(NULL,16) NANVL(1024,NULL) NANVL(NULL,NULL)
_________________ ___________________ ___________________
null null null
Domyślnie SQLcl i SQL*Plus zwracają spację za każdym razem, gdy w wyniku polecenia SQL SELECT wystąpi wartość null oświadczenie.
Możesz jednak użyć SET NULL aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null należy zwrócić.
Brakujące argumenty
Wywołanie NANVL() bez żadnych argumentów powoduje błąd:
SELECT NANVL()
FROM DUAL; Wynik:
Error starting at line : 1 in command - SELECT NANVL() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action:
I to samo dotyczy wywoływania go ze zbyt dużą liczbą argumentów:
SELECT NANVL(10, 2, 3)
FROM DUAL; Wynik:
Error starting at line : 1 in command - SELECT NANVL(10, 2, 3) FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: