Tempo de leitura: menos de 1 minuto
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


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