Utilizando CASE nos selects do Oracle

Neste post, demonstro como utilizar uma expressão case em um select feito com PL/SQL (Oracle). O exemplo é bem simples, mas pode ser facilmente adaptado para necessidades mais complexas.

Para fins didáticos, vamos considerar que a tabela CLIENTE possui uma coluna chamada CLI_STATUS que possui as seguintes siglas:

Sigla Significado
A1 Ativo
A2 Ativo
B Bloqueado
D Desativado
DP Desaparecido

Considere também que esta tabela possui uma coluna chamada CLI_NOME e CLI_ID com (respectivamente) o nome e o id do cliente.

A ideia é fazer um select que retorne o ID, o Nome, o status (sigla) e o significado de cada sigla.

O select básico é este:

SELECT cli_id, cli_nome, cli_status FROM cliente;

Agora vamos elaborar o case:

CASE
	WHEN status IN('A1','A2') THEN 'Ativo'
	WHEN status = 'B' THEN 'Bloqueado'
	WHEN status = 'D' THEN 'Desativado'
	WHEN status = 'DP' THEN 'Desaparecido'	
END AS sigla_descricao

Este case irá escrever Ativo quando o valor de status for A1 ou A2, Bloqueado quando o valor de status for B, Desativado quando o valor de status for D e Desaparecido quando o valor de status for DP.

Ok, isso resolve o problema, mas vamos imaginar que esta tabela vem de um sistema legado e pode possuir outros valores nesta coluna. Como eles não interessam para o nosso sistema, qualquer outro valor que vier deve ser considerado como legado.

Sendo assim, vamos evoluir nosso case:

CASE
	WHEN status IN('A1','A2') THEN 'Ativo'
	WHEN status = 'B' THEN 'Bloqueado'
	WHEN status = 'D' THEN 'Desativado'
	WHEN status = 'DP' THEN 'Desaparecido'	
	ELSE 'Legado'
END AS sigla_descricao

Pronto. Agora todos os valores estão cobertos pela expressão case. Só colocar ela no select:

SELECT  cli_id
        , cli_nome
        , cli_status 
        , CASE
            WHEN status IN('A1','A2') THEN 'Ativo'
            WHEN status = 'B' THEN 'Bloqueado'
            WHEN status = 'D' THEN 'Desativado'
            WHEN status = 'DP' THEN 'Desaparecido'	
            ELSE 'Legado'
          END AS sigla_descricao
        FROM cliente;

 

Espero ter ajudado.

 

Referência: CASE Expressions
The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Banco de Dados, Dev and tagged , , , , , , , .