Oracle Database
Manejo de valores nulos
Buscar..
Introducción
Una columna es NULA cuando no tiene valor, independientemente del tipo de datos de esa columna. Una columna nunca debe compararse con NULL usando esta sintaxis
a = NULL
ya que el resultado sería DESCONOCIDO. En su lugar, utilice las condiciones a IS NULL
o a IS NOT NULL
. NULL no es igual a NULL. Para comparar dos expresiones donde puede ocurrir una nula, use una de las funciones que se describen a continuación. Todos los operadores, excepto la concatenación, devuelven NULL si uno de sus operandos es NULL. Por ejemplo, el resultado de 3 * NULL + 5
es nulo.
Observaciones
NULL no puede aparecer en columnas restringidas por una CLAVE PRINCIPAL o una restricción NOT NULL. (La excepción es una nueva restricción con la cláusula NOVALIDATE)
Las columnas de cualquier tipo de datos pueden contener NULLs
SELECT 1 NUM_COLUMN, 'foo' VARCHAR2_COLUMN from DUAL
UNION ALL
SELECT NULL, NULL from DUAL;
NUM_COLUMN | VARCHAR2_COLUMN |
---|---|
1 | foo |
(nulo) | (nulo) |
Las cadenas vacías son NULL
SELECT 1 a, '' b from DUAL;
UNA | segundo |
---|---|
1 | (nulo) |
Las operaciones que contienen NULL son NULL, excepto la concatenación
SELECT 3 * NULL + 5, 'Hello ' || NULL || 'world' from DUAL;
3 * NULL + 5 | 'HOLA' || NULL || 'MUNDO' |
---|---|
(nulo) | Hola Mundo |
NVL para reemplazar el valor nulo
SELECT a column_with_null, NVL(a, 'N/A') column_without_null FROM
(SELECT NULL a FROM DUAL);
COLUMN_WITH_NULL | COLUMN_WITHOUT_NULL |
---|---|
(nulo) | N / A |
NVL es útil para comparar dos valores que pueden contener valores nulos:
SELECT
CASE WHEN a = b THEN 1 WHEN a <> b THEN 0 else -1 END comparison_without_nvl,
CASE WHEN NVL(a, -1) = NVL(b, -1) THEN 1 WHEN NVL(a, -1) <> NVL(b, -1) THEN 0 else -1 END comparison_with_nvl
FROM
(select null a, 3 b FROM DUAL
UNION ALL
SELECT NULL, NULL FROM DUAL);
COMPARISON_WITHOUT_NVL | COMPARACIÓN_WITH_NVL |
---|---|
-1 | 0 |
-1 | 1 |
NVL2 para obtener un resultado diferente si un valor es nulo o no
Si el primer parámetro NO es NULO, NVL2 devolverá el segundo parámetro. De lo contrario volverá el tercero.
SELECT NVL2(null, 'Foo', 'Bar'), NVL2(5, 'Foo', 'Bar') FROM DUAL;
NVL2 (NULL, 'FOO', 'BAR') | NVL2 (5, 'FOO', 'BAR') |
---|---|
Bar | Foo |
COALESCE para devolver el primer valor no NULL
SELECT COALESCE(a, b, c, d, 5) FROM
(SELECT NULL A, NULL b, NULL c, 4 d FROM DUAL);
COALESCE (A, B, C, D, 5) |
---|
4 |
En algunos casos, usar COALESCE con dos parámetros puede ser más rápido que usar NVL cuando el segundo parámetro no es una constante. NVL siempre evaluará ambos parámetros. COALESCE se detendrá en el primer valor no NULL que encuentre. Esto significa que si el primer valor no es NULL, COALESCE será más rápido.
Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow