Oracle: funções NVL e NVL2

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.

 
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

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

%d blogueiros gostam disto: