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