domingo, 6 de agosto de 2017

Oracle - Substituir resultado nulo ou vazio por uma String

Olá!

Observe a tabela abaixo:
PESSOA
CD_PESSOANOMESOBRENOMEIDADE
1FelipeBarbosa23
2Ananullnull
3JoãoSantosnull
4Alinenull21
5Maira
25
6Ana
null
7AlineFerreira22

Veja que nas colunas SOBRENOME e IDADE há valores nulos, e também está presente alguns registros com o sobrenome vazio (lembre-se vazio é diferente de null).

Com a execução do SQL:

SELECT NOME
, SOBRENOME
, IDADE
FROM PESSOA;

Conseguimos facilmente retornar os valores contidos na tabela PESSOA. Entretanto, o usuário irá visualizar os seguintes dados:

Resultado:
NOMESOBRENOMEIDADE
FelipeBarbosa23
Ananullnull
JoãoSantosnull
Alinenull21
Maira
25
Ana
null
AlineFerreira22

Note que sem realizar o tratamento dos dados, estamos cometendo um ERRO ao apresentar null para o usuário.

  • Solução. Realizar tratamento de nulidade e valores vazios.
No banco de dados (DB) Oracle temos a função NVL() para realizar o tratamento do resultado nulo ou vazio de uma expressão.

Sintaxe:
NVL(expressão, 'texto para substituição')

Ou seja, o primeiro argumento da função é uma expressão que pode ser uma coluna, o resultado de outra função, etc. Já o segundo argumento é uma string (texto qualquer) que você queira que seja apresentado quando o primeiro argumento seja nulo ou vazio.

Exemplos:

1) - NVL('Felipe', 'Ana')
Resultado: Felipe


2) - NVL('', 'Ana')
Resultado: Ana


3) - NVL(null, 'Ana')
Resultado: Ana


4) - Agora vamos usar a função no nosso primeiro SQL:
SELECT NOME
, NVL(SOBRENOME, 'Não cadastrado')
, NVL(IDADE, 'Não cadastrado')
FROM PESSOA;

Resultado:
NOMESOBRENOMEIDADE
FelipeBarbosa23
AnaNão cadastradoNão cadastrado
JoãoSantosNão cadastrado
AlineNão cadastrado21
MairaNão cadastrado25
AnaNão cadastradoNão cadastrado
AlineFerreira22

De forma prática realizamos a substituição de dados nulos e vazios para o valor 'Não cadastrado', assim retornando ao usuário uma resposta legível.

Consultar a relação de Termos e Abreviaturas acesse aqui.
FELIPE BARBOSA FERREIRA

Até o próximo post!