In Oracle, de NANVL() functie stelt ons in staat om te gaan met NaN waarden door een ander nummer op te geven dat in de plaats moet worden geretourneerd.
De manier waarop het werkt, is dat het twee argumenten accepteert. Als het eerste argument NaN . is (geen getal), het retourneert het tweede argument. Als het eerste argument is een getal, dan geeft het gewoon dat getal terug.
Merk op dat deze functie alleen nuttig is voor getallen met drijvende komma van het type BINARY_FLOAT of BINARY_DOUBLE .
Syntaxis
De syntaxis gaat als volgt:
NANVL(n2, n1) Elk argument kan elk numeriek gegevenstype zijn of elk niet-numeriek gegevenstype dat impliciet kan worden geconverteerd naar een numeriek gegevenstype.
Voorbeeld
We kunnen NaN . produceren door een nul float/double waarde te delen door nul:
SELECT 0f/0
FROM DUAL; Resultaat:
0F/0 _______ NaN
Maar als we NaN . niet willen om te worden geretourneerd, kunnen we de NANVL() . gebruiken functie om een andere waarde te retourneren:
SELECT NANVL(0f/0, 0)
FROM DUAL; Resultaat:
NANVL(0F/0,0) ________________ 0.0
Hier is het weer, maar deze keer specificeren we een andere waarde om terug te keren in plaats van NaN :
SELECT NANVL(0f/0, 123)
FROM DUAL; Resultaat:
NANVL(0F/0,123) __________________ 123.0
NaN Drijvende-komma letterlijke
Oracle biedt ook enkele letterlijke drijvende komma's voor situaties die niet kunnen worden uitgedrukt als een numerieke letterlijke. Deze omvatten binary_float_nan wat staat voor een waarde van het type BINARY_FLOAT waarvoor de voorwaarde IS NAN is waar, en binary_double_nan , wat staat voor een waarde van het type BINARY_DOUBLE waarvoor de voorwaarde IS NAN is waar.
Hier is een voorbeeld van het gebruik van deze drijvende-kommaliteralen:
SELECT
NANVL(binary_double_nan, 0),
NANVL(binary_float_nan, 0)
FROM DUAL; Resultaat:
NANVL(BINARY_DOUBLE_NAN,0) NANVL(BINARY_FLOAT_NAN,0) _____________________________ ____________________________ 0.0 0.0
Een nummer doorgeven
Zoals gezegd, als het eerste argument een getal is, wordt dat getal geretourneerd:
SELECT NANVL(33, 0)
FROM DUAL; Resultaat:
NANVL(33,0)
______________
33 Niet-numerieke argumenten
De argumenten kunnen elk numeriek gegevenstype zijn of elk niet-numeriek gegevenstype dat impliciet kan worden geconverteerd naar een numeriek gegevenstype.
Hier is een voorbeeld van wat er gebeurt als de argumenten niet aan die criteria voldoen:
SELECT NANVL('Gosh', 'Dang')
FROM DUAL; Resultaat:
Error starting at line : 1 in command -
SELECT NANVL('Gosh', 'Dang')
FROM DUAL
Error report -
ORA-01722: invalid number Nullargumenten
NANVL() retourneert null als een argument null is :
SET NULL 'null';
SELECT
NANVL(null, 16),
NANVL(1024, null),
NANVL(null, null)
FROM DUAL; Resultaat:
NANVL(NULL,16) NANVL(1024,NULL) NANVL(NULL,NULL)
_________________ ___________________ ___________________
null null null
Standaard retourneren SQLcl en SQL*Plus een spatie wanneer een null-waarde optreedt als resultaat van een SQL SELECT uitspraak.
U kunt echter SET NULL . gebruiken om een andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null moet worden geretourneerd.
Ontbrekende argumenten
Aanroepen van NANVL() zonder argumenten resulteert in een fout:
SELECT NANVL()
FROM DUAL; Resultaat:
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:
En hetzelfde geldt als je het met te veel argumenten aanroept:
SELECT NANVL(10, 2, 3)
FROM DUAL; Resultaat:
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: