Funcionalidade
Temos duas formas de trabalhar com condição dentro de consultas em Oracle SQL, são elas o Case e o Decode. Os dois tem a mesma função, que é permitir de forma dinâmica e pratica como obter um retorno de uma coluna com base em uma condição, ou seja, ter a possibilidade de usar condições semelhantes ao IF-THEN-ELSE em consultas.
Assim, é possível definir de forma dinâmica e bem pratica o que será exibido na tela, evitando assim, consultas com retorno de colunas em branco, por exemplo.
Diferença
O exemplo abaixo mostra o tipo de trabalho com o Case e o Decode. O Decode irá traduzir os valores passados por uma coluna com o esquema de codificação (1, 2, 3, 4) e irá retornar os valores decodificados (“Presidente”, “Diretor”, “Gerente”, “Funcionário”).
O Case é parecido com o Decode, eles tem uma forma de processo que vem lendo os valores da esquerda para a direita, avaliando um a um e quando encontra um valor verdadeiro, ele retorna o valor correspondente.
Por exemplo, você precisa saber qual o cargo referente ao código 2, então, ele irá pesquisar esse valor e quando achar, retornará o valor equivalente, ou seja, “Diretor”.
Qualquer expressão feita com o Case poderá ser feito com o Decode, mas é difícil ter a mesma flexibilidade e possivelmente, será desgastante escrever grandes códigos com o Decode. A Diferença entre os dois é praticamente essa, que na verdade, faz com que o Case seja melhor de se trabalhar.
Decode
SELECT
DECODE
(
vCargo,
1, 'Presidente',
2, 'Diretor',
3, 'Gerente',
'Funcionário'
)
FROM dual;
Case Simples
SELECT
CASE
vCargo
WHEN 1
THEN 'Presidente'
WHEN 2
THEN 'Diretor'
WHEN 3
THEN 'Gerente'
ELSE 'Funcionário'
END
FROM dual;
Case com Pesquisa
SELECT
CASE
WHEN vCargo = 1
THEN 'Presidente'
WHEN vCargo = 2
THEN 'Diretor'
WHEN vCargo = 3
THEN 'Gerente'
ELSE 'Funcionário'
END
FROM dual;
Case x Decode, Quem vence?
Implementado na versão Oracle 8.1.6, o Case é o melhor. Ele é mais flexível, tem uma melhor performance de execução, é mais fácil para leitura e escrita e conseqüentemente é mais fácil de eliminar erros e manter uma codificação mais elegante.