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)