Oracle Database
Gestion des valeurs NULL
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