En Oracle, el NANVL() La función nos permite tratar con NaN valores especificando otro número para devolver en su lugar.
La forma en que funciona es que acepta dos argumentos. Si el primer argumento es NaN (no un número), devuelve el segundo argumento. Si el primer argumento es un número, simplemente devuelve ese número.
Tenga en cuenta que esta función solo es útil para números de coma flotante de tipo BINARY_FLOAT o BINARY_DOUBLE .
Sintaxis
La sintaxis es así:
NANVL(n2, n1) Cada argumento puede ser cualquier tipo de dato numérico o cualquier tipo de dato no numérico que se pueda convertir implícitamente a un tipo de dato numérico.
Ejemplo
Podemos producir NaN dividiendo un valor flotante/doble cero por cero:
SELECT 0f/0
FROM DUAL; Resultado:
0F/0 _______ NaN
Pero si no queremos NaN para ser devuelto, podemos usar el NANVL() función para devolver un valor diferente:
SELECT NANVL(0f/0, 0)
FROM DUAL; Resultado:
NANVL(0F/0,0) ________________ 0.0
Aquí está de nuevo, pero esta vez especificamos un valor diferente para devolver en lugar de NaN :
SELECT NANVL(0f/0, 123)
FROM DUAL; Resultado:
NANVL(0F/0,123) __________________ 123.0
NaN Literal de coma flotante
Oracle también proporciona algunos literales de coma flotante para situaciones que no se pueden expresar como un literal numérico. Estos incluyen binary_float_nan que representa un valor de tipo BINARY_FLOAT para el cual la condición IS NAN es verdadero, y binary_double_nan , que representa un valor de tipo BINARY_DOUBLE para el cual la condición IS NAN es verdad.
Aquí hay un ejemplo del uso de estos literales de punto flotante en su lugar:
SELECT
NANVL(binary_double_nan, 0),
NANVL(binary_float_nan, 0)
FROM DUAL; Resultado:
NANVL(BINARY_DOUBLE_NAN,0) NANVL(BINARY_FLOAT_NAN,0) _____________________________ ____________________________ 0.0 0.0
Pasar un número
Como se mencionó, si el primer argumento es un número, devuelve ese número:
SELECT NANVL(33, 0)
FROM DUAL; Resultado:
NANVL(33,0)
______________
33 Argumentos no numéricos
Los argumentos pueden ser cualquier tipo de dato numérico o cualquier tipo de dato no numérico que se pueda convertir implícitamente a un tipo de dato numérico.
Aquí hay un ejemplo de lo que sucede cuando los argumentos no satisfacen ese criterio:
SELECT NANVL('Gosh', 'Dang')
FROM DUAL; Resultado:
Error starting at line : 1 in command -
SELECT NANVL('Gosh', 'Dang')
FROM DUAL
Error report -
ORA-01722: invalid number Argumentos nulos
NANVL() devuelve null si algún argumento es null :
SET NULL 'null';
SELECT
NANVL(null, 16),
NANVL(1024, null),
NANVL(null, null)
FROM DUAL; Resultado:
NANVL(NULL,16) NANVL(1024,NULL) NANVL(NULL,NULL)
_________________ ___________________ ___________________
null null null
De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que se produce un valor nulo como resultado de un SQL SELECT declaración.
Sin embargo, puede usar SET NULL para especificar una cadena diferente a devolver. Aquí especifiqué que la cadena null debe ser devuelto.
Argumentos faltantes
Llamando a NANVL() sin ningún argumento da como resultado un error:
SELECT NANVL()
FROM DUAL; Resultado:
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:
Y lo mismo se aplica cuando se llama con demasiados argumentos:
SELECT NANVL(10, 2, 3)
FROM DUAL; Resultado:
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: