Ricerca…


introduzione

Una colonna è NULL quando non ha alcun valore, indipendentemente dal tipo di dati di quella colonna. Una colonna non dovrebbe mai essere paragonata a NULL usando questa sintassi a = NULL quanto il risultato sarebbe UNKNOWN. Usa invece a IS NULL o a IS NOT NULL . NULL non è uguale a NULL. Per confrontare due espressioni in cui può verificarsi null, utilizzare una delle funzioni descritte di seguito. Tutti gli operatori tranne la concatenazione restituiscono NULL se uno dei loro operandi è NULL. Ad esempio il risultato di 3 * NULL + 5 è nullo.

Osservazioni

NULL non può apparire in colonne limitate da una PRIMARY KEY o da un vincolo NOT NULL. (L'eccezione è un nuovo vincolo con la clausola NOVALIDATE)

Le colonne di qualsiasi tipo di dati possono contenere valori NULL

SELECT 1 NUM_COLUMN, 'foo' VARCHAR2_COLUMN from DUAL
UNION ALL
SELECT NULL, NULL from DUAL;
NUM_COLUMN VARCHAR2_COLUMN
1 foo
(nullo) (nullo)

Le stringhe vuote sono NULL

SELECT 1 a, '' b from DUAL;
UN B
1 (nullo)

Le operazioni che contengono NULL sono NULL, tranne la concatenazione

SELECT 3 * NULL + 5, 'Hello ' || NULL || 'world'   from DUAL;
3 * NULL + 5 'CIAO' || NULL || 'Mondo'
(nullo) Ciao mondo

NVL per sostituire il valore nullo

SELECT a column_with_null, NVL(a, 'N/A') column_without_null FROM
  (SELECT NULL a FROM DUAL);
COLUMN_WITH_NULL COLUMN_WITHOUT_NULL
(nullo) N / A

NVL è utile per confrontare due valori che possono contenere valori 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 per ottenere un risultato diverso se un valore è nullo o no

Se il primo parametro NON è NULL, NVL2 restituirà il secondo parametro. Altrimenti restituirà il terzo.

SELECT NVL2(null, 'Foo', 'Bar'), NVL2(5, 'Foo', 'Bar') FROM DUAL;
NVL2 (NULL, 'FOO', 'bar') NVL2 (5, 'FOO', 'bar')
Bar foo

COALESCE per restituire il primo valore non NULL

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 alcuni casi, l'utilizzo di COALESCE con due parametri può essere più rapido rispetto all'utilizzo di NVL quando il secondo parametro non è una costante. NVL valuterà sempre entrambi i parametri. COALESCE si fermerà al primo valore non NULL che incontra. Significa che se il primo valore non è NULL, COALESCE sarà più veloce.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow