Oracle Database
NULL-waarden verwerken
Zoeken…
Invoering
Een kolom is NULL als deze geen waarde heeft, ongeacht het gegevenstype van die kolom. Een kolom mag nooit worden vergeleken met NULL met deze syntaxis
a = NULL
omdat het resultaat ONBEKEND zou zijn. Gebruik in plaats daarvan de voorwaarden a IS NULL
of a IS NOT NULL
. NULL is niet gelijk aan NULL. Gebruik een van de hieronder beschreven functies om twee uitdrukkingen met nul te vergelijken. Alle operatoren behalve aaneenschakeling retourneren NULL als een van hun operand NULL is. Het resultaat van 3 * NULL + 5
is bijvoorbeeld nul.
Opmerkingen
NULL kan niet worden weergegeven in kolommen die worden beperkt door een PRIMARY KEY of een NOT NULL-beperking. (Uitzondering is een nieuwe beperking met NOVALIDATE-clausule)
Kolommen van elk gegevenstype kunnen NULL's bevatten
SELECT 1 NUM_COLUMN, 'foo' VARCHAR2_COLUMN from DUAL
UNION ALL
SELECT NULL, NULL from DUAL;
NUM_COLUMN | VARCHAR2_COLUMN |
---|---|
1 | foo |
(nul) | (nul) |
Lege tekenreeksen zijn NULL
SELECT 1 a, '' b from DUAL;
EEN | B |
---|---|
1 | (nul) |
Bewerkingen die NULL bevatten zijn NULL, behalve aaneenschakeling
SELECT 3 * NULL + 5, 'Hello ' || NULL || 'world' from DUAL;
3 * + 5 NULL | 'HELLO' || NULL || 'WORLD' |
---|---|
(nul) | Hallo Wereld |
NVL om de nulwaarde te vervangen
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 is handig om twee waarden te vergelijken die NULL kunnen bevatten:
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 om een ander resultaat te krijgen als een waarde nul is of niet
Als de eerste parameter NIET NULL is, retourneert NVL2 de tweede parameter. Anders wordt de derde geretourneerd.
SELECT NVL2(null, 'Foo', 'Bar'), NVL2(5, 'Foo', 'Bar') FROM DUAL;
NVL2 (NULL, 'FOO', 'BAR') | NVL2 (5, 'FOO', 'BAR') |
---|---|
Bar | Foo |
COALESCE om de eerste niet-NULL-waarde te retourneren
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 |
In sommige gevallen kan het gebruik van COALESCE met twee parameters sneller zijn dan het gebruik van NVL wanneer de tweede parameter geen constante is. NVL zal beide parameters altijd evalueren. COALESCE stopt bij de eerste niet-NULL-waarde die het tegenkomt. Het betekent dat als de eerste waarde niet-NULL is, COALESCE sneller zal zijn.
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow