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.
SELECT NOME, NVL(RG, 'INVÁLIDO') FROM PESSOA;
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“.
SELECT NOME, NVL2(RG, 'RG foi preenchido', 'RG Inválido') FROM PESSOA;
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)”:
SELECT NOME FROM PESSOA WHERE NVL(N_FILHOS,0) = 0; -- MESMO SE O VALOR FOR NULL RETORNA ZERO.
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?
SELECT 10 + NULL FROM DUAL; -- RETORNA NULL.
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