Categorias:

Funções de expressão condicional

NVL

Se expr1 for NULL, retorna expr2, caso contrário, retorna expr1.

Aliases:

IFNULL

Sintaxe

NVL( <expr1> , <expr2> )
Copy

Argumentos

expr1

Uma expressão geral.

expr2

Uma expressão geral.

Notas de uso

  • Se possível, passe em argumentos do mesmo tipo. Evite passar em argumentos de diferentes tipos.

  • Se um dos argumentos for um número, a função aplica a coerção aos argumentos de cadeia de caracteres não numéricos (por exemplo, 'a string') e argumentos de cadeia de caracteres que não são constantes do tipo NUMBER(18,5).

    Para argumentos de cadeia de caracteres numérica que não são constantes, se NUMBER(18,5) não for suficiente para representar o valor numérico, você deve converter o argumento em um tipo que possa representar o valor.

  • Qualquer uma das expressões pode incluir uma instrução SELECT contendo operadores definidos, tais como UNION, INTERSECT, EXCEPT e MINUS. Ao utilizar os operadores do conjunto, certifique-se de que os tipos de dados sejam compatíveis. Para obter mais detalhes, consulte Notas de uso geral no tópico Operadores de conjuntos.

Detalhes do agrupamento

Retornos

Retorna o tipo de dados da expressão retornada.

Se ambas as expressões forem NULL, retorna NULL.

Exemplos

Crie uma tabela que contenha informações de contato dos fornecedores:

CREATE TABLE IF NOT EXISTS suppliers (
  supplier_id INT PRIMARY KEY,
  supplier_name VARCHAR(30),
  phone_region_1 VARCHAR(15),
  phone_region_2 VARCHAR(15));
Copy

A tabela contém o número de telefone de cada fornecedor em duas regiões diferentes. O número de telefone pode ser NULL para uma região.

Insira valores na tabela:

INSERT INTO suppliers(supplier_id, supplier_name, phone_region_1, phone_region_2)
  VALUES(1, 'Company_ABC', NULL, '555-01111'),
        (2, 'Company_DEF', '555-01222', NULL),
        (3, 'Company_HIJ', '555-01333', '555-01444'),
        (4, 'Company_KLM', NULL, NULL);
Copy

A instrução SELECT a seguir usa a função NVL para recuperar os valores phone_region_1 e phone_region_2.

Este exemplo mostra os seguintes resultados para a função NVL:

  • A coluna IF_REGION_1_NULL contém o valor em phone_region_1 ou, se esse valor for NULL, o valor em phone_region_2.

  • A coluna IF_REGION_2_NULL contém o valor em phone_region_2 ou, se esse valor for NULL, o valor em phone_region_1.

  • Se phone_region_1 e phone_region_2 forem NULL, a função retornará NULL.

SELECT supplier_id,
       supplier_name,
       phone_region_1,
       phone_region_2,
       NVL(phone_region_1, phone_region_2) IF_REGION_1_NULL,
       NVL(phone_region_2, phone_region_1) IF_REGION_2_NULL
  FROM suppliers
  ORDER BY supplier_id;
Copy
+-------------+---------------+----------------+----------------+------------------+------------------+
| SUPPLIER_ID | SUPPLIER_NAME | PHONE_REGION_1 | PHONE_REGION_2 | IF_REGION_1_NULL | IF_REGION_2_NULL |
|-------------+---------------+----------------+----------------+------------------+------------------|
|           1 | Company_ABC   | NULL           | 555-01111      | 555-01111        | 555-01111        |
|           2 | Company_DEF   | 555-01222      | NULL           | 555-01222        | 555-01222        |
|           3 | Company_HIJ   | 555-01333      | 555-01444      | 555-01333        | 555-01444        |
|           4 | Company_KLM   | NULL           | NULL           | NULL             | NULL             |
+-------------+---------------+----------------+----------------+------------------+------------------+