Oracle Database
Obsługa wartości NULL
Szukaj…
Wprowadzenie
Kolumna ma wartość NULL, jeśli nie ma żadnej wartości, niezależnie od typu danych tej kolumny. Kolumny nigdy nie należy porównywać z wartością NULL przy użyciu tej składni
a = NULL
ponieważ wynik byłby NIEZNANY. Zamiast tego użyj warunków a IS NULL
lub a IS NOT NULL
. NULL nie jest równy NULL. Aby porównać dwa wyrażenia, w których może wystąpić wartość null, użyj jednej z funkcji opisanych poniżej. Wszystkie operatory oprócz konkatenacji zwracają NULL, jeśli jeden z ich operandów ma wartość NULL. Na przykład wynik 3 * NULL + 5
jest zerowy.
Uwagi
Wartość NULL nie może pojawiać się w kolumnach ograniczonych kluczem podstawowym lub ograniczeniem NOT NULL. (Wyjątek jest nowym ograniczeniem z klauzulą NOVALIDATE)
Kolumny dowolnego typu danych mogą zawierać wartości NULL
SELECT 1 NUM_COLUMN, 'foo' VARCHAR2_COLUMN from DUAL
UNION ALL
SELECT NULL, NULL from DUAL;
NUM_COLUMN | VARCHAR2_COLUMN |
---|---|
1 | bla |
(zero) | (zero) |
Puste łańcuchy mają wartość NULL
SELECT 1 a, '' b from DUAL;
ZA | b |
---|---|
1 | (zero) |
Operacje zawierające NULL są NULL, z wyjątkiem konkatenacji
SELECT 3 * NULL + 5, 'Hello ' || NULL || 'world' from DUAL;
3 * NULL + 5 | „CZEŚĆ” || NULL || „WORLD” |
---|---|
(zero) | Witaj świecie |
NVL, aby zastąpić wartość zerową
SELECT a column_with_null, NVL(a, 'N/A') column_without_null FROM
(SELECT NULL a FROM DUAL);
COLUMN_WITH_NULL | COLUMN_WITHOUT_NULL |
---|---|
(zero) | Nie dotyczy |
NVL jest przydatny do porównania dwóch wartości, które mogą zawierać wartości 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, aby uzyskać inny wynik, jeśli wartość jest zerowa lub nie
Jeśli pierwszym parametrem jest NOT NULL, NVL2 zwróci drugi parametr. W przeciwnym razie zwróci trzeci.
SELECT NVL2(null, 'Foo', 'Bar'), NVL2(5, 'Foo', 'Bar') FROM DUAL;
NVL2 (NULL, „FOO”, „BAR”) | NVL2 (5, „FOO”, „BAR”) |
---|---|
Bar | bla |
COALESCE, aby zwrócić pierwszą wartość inną niż NULL
SELECT COALESCE(a, b, c, d, 5) FROM
(SELECT NULL A, NULL b, NULL c, 4 d FROM DUAL);
WSPÓŁPRACA (A, B, C, D, 5) |
---|
4 |
W niektórych przypadkach użycie COALESCE z dwoma parametrami może być szybsze niż użycie NVL, gdy drugi parametr nie jest stały. NVL zawsze oceni oba parametry. COALESCE zatrzyma się na pierwszej napotkanej wartości innej niż NULL. Oznacza to, że jeśli pierwsza wartość nie jest równa NULL, KOPALNOŚĆ będzie szybsza.
Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow