Handling NULL values
Operations containing NULL are NULL, except concatenation
3*NULL+5 | 'HELLO' | | NULL | | 'WORLD' |
(null) | Hello world | | | | |
NVL2 to get a different result if a value is null or not
If the first parameter is NOT NULL, NVL2 will return the second parameter. Otherwise it will return the third one.
NVL2(NULL,'FOO','BAR') | NVL2(5,'FOO','BAR') |
Bar | Foo |
COALESCE to return the first non-NULL value
In some case, using COALESCE with two parameters can be faster than using NVL when the second parameter is not a constant. NVL will always evaluate both parameters. COALESCE will stop at the first non-NULL value it encounters. It means that if the first value is non-NULL, COALESCE will be faster.
Columns of any data type can contain NULLs
NUM_COLUMN | VARCHAR2_COLUMN |
1 | foo |
(null) | (null) |
Empty strings are NULL
NVL to replace null value
COLUMN_WITH_NULL | COLUMN_WITHOUT_NULL |
(null) | N/A |
NVL is useful to compare two values which can contain NULLs :
COMPARISON_WITHOUT_NVL | COMPARISON_WITH_NVL |
-1 | 0 |
-1 | 1 |
NULL can't appear in columns restricted by a PRIMARY KEY or a NOT NULL constraint.
(Exception is a new constraint with NOVALIDATE clause)