Oracle: funções NVL e NVL2

Tempo de leitura: menos de 1 minuto

Banco de dados

Muitas vezes em consulta a banco de dados, ou quando criamos uma VIEW, um campo do registro pode estar nulo, mas precisamos que ele esteja preenchido com um valor default.

Para isso o Oracle disponibiliza duas funções úteis o NVL() e NVL2().

A função NVL() recebe dois parâmetros, o primeiro é o valor usado na condição, o segundo é o valor default a ser usado quando valor for null.

[code language=”sql”]
SELECT NOME, NVL(RG, ‘INVÁLIDO’)
FROM PESSOA;
[/code]

Neste exemplo, quando o RG estiver nulo o valor retornado será ‘INVÁLIDO’.

Já a função NVL2 recebe três parâmetros, o primeiro é o valor usado na condição, o segundo será o resultado da consulta quando o valor na condição for NOT NULL, e o terceiro quando for NULL. Seu funcionamento é semelhante a um “if ternário“.

[code language=”sql”]
SELECT NOME, NVL2(RG, ‘RG foi preenchido’, ‘RG Inválido’)
FROM PESSOA;
[/code]

Neste exemplo, quando o RG for NOT NULL o retorno será “RG foi preenchido”, caso contrário, o retorno será “RG Inválido”.

Outro uso destas funções é na restrição de uma query. Imagine a seguinte restrição: “retorne as pessoas onde o número de filhos for NULL ou 0 (ZERO)”:

[code language=”sql”]
SELECT NOME
FROM PESSOA
WHERE NVL(N_FILHOS,0) = 0; — MESMO SE O VALOR FOR NULL RETORNA ZERO.
[/code]

Agora eu te pergunto: Se realizarmos uma consulta somando duas colunas, sendo que a coluna_a tem o valor 10 e a coluna_b está nula, qual é o valor que será retornado?

[code language=”sql”]
SELECT 10 + NULL FROM DUAL;
— RETORNA NULL.
[/code]

A resposta é NULL. O Oracle entende que o valor null é uma inválido para ser usando em uma operação matemática, logo o resultado de 10 + null é igual a null, ou seja, inválido.

Por hoje é só!

Fonte: Vida de Programador

Nenhum comentário


  1. Muito boa explicação. Me ajudou bastante. Parabéns!

    Responder

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *