Recherche…


Introduction

Une colonne est NULL lorsqu'elle n'a pas de valeur, quel que soit le type de données de cette colonne. Une colonne ne devrait jamais être comparée à NULL en utilisant cette syntaxe a = NULL car le résultat serait INCONNU. Utilisez plutôt a IS NULL ou a IS NOT NULL condition a IS NOT NULL . NULL n'est pas égal à NULL. Pour comparer deux expressions où null peut se produire, utilisez l'une des fonctions décrites ci-dessous. Tous les opérateurs sauf la concaténation renvoient NULL si l'un de leurs opérandes est NULL. Par exemple, le résultat de 3 * NULL + 5 est nul.

Remarques

NULL ne peut pas apparaître dans les colonnes restreintes par une contrainte PRIMARY KEY ou NOT NULL. (L'exception est une nouvelle contrainte avec la clause NOVALIDATE)

Les colonnes de tout type de données peuvent contenir des valeurs NULL

SELECT 1 NUM_COLUMN, 'foo' VARCHAR2_COLUMN from DUAL
UNION ALL
SELECT NULL, NULL from DUAL;
NUM_COLUMN VARCHAR2_COLUMN
1 foo
(nul) (nul)

Les chaînes vides sont NULL

SELECT 1 a, '' b from DUAL;
UNE B
1 (nul)

Les opérations contenant NULL sont NULL, sauf la concaténation

SELECT 3 * NULL + 5, 'Hello ' || NULL || 'world'   from DUAL;
3 * NULL + 5 'HELLO' || NULL || 'WORLD'
(nul) Bonjour le monde

NVL pour remplacer la valeur nulle

SELECT a column_with_null, NVL(a, 'N/A') column_without_null FROM
  (SELECT NULL a FROM DUAL);
COLUMN_WITH_NULL COLUMN_WITHOUT_NULL
(nul) N / A

NVL est utile pour comparer deux valeurs pouvant contenir des valeurs NULL:

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 COMPARISON_WITH_NVL
-1 0
-1 1

NVL2 pour obtenir un résultat différent si une valeur est nulle ou non

Si le premier paramètre est NOT NULL, NVL2 renvoie le deuxième paramètre. Sinon, il retournera le troisième.

SELECT NVL2(null, 'Foo', 'Bar'), NVL2(5, 'Foo', 'Bar') FROM DUAL;
NVL2 (NULL, 'FOO', 'BAR') NVL2 (5, «FOO», «BAR»)
Bar Foo

COALESCE pour retourner la première valeur non 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

Dans certains cas, l'utilisation de COALESCE avec deux paramètres peut être plus rapide qu'avec NVL lorsque le second paramètre n'est pas une constante. NVL évaluera toujours les deux paramètres. COALESCE s'arrêtera à la première valeur non NULL rencontrée. Cela signifie que si la première valeur est non-NULL, COALESCE sera plus rapide.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow