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