Decode x Case

Veja neste artigo como trabalhar com o Case e o Decode, suas funcionalidades, as diferenças e qual o melhor.

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.

Artigos relacionados