1 – Funcionalidade: O Oracle possui duas formas de trabalhar com condição dentro de consultas em Oracle SQL, o Case e o Decode. As duas formas tem a mesma função, que é permitir de forma dinâmica e prática 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.
Sendo assim, é possível definir de forma dinâmica e bem prática o que será exibido na tela, evitando, consultas com retorno de colunas em branco..
2 – 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 (“Azul”, “Branco”, “Amarelo”, “Verde”) referentes aos códigos.
• 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 a cor referente ao código 3, então, ele irá pesquisar esse valor e quando achar, retornará o valor equivalente, ou seja, “Amarelo”.
Qualquer expressão feita com o Case poderá ser feita 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.
Exemplos:
Decode
SELECT
DECODE
(
V_NM_COR,
1, 'Azul',
2, 'Branco',
3, 'Amarelo',
'Verde'
)
FROM dual;
Case Simples
SELECT
CASE
V_NM_COR
WHEN 1
THEN 'Azul'
WHEN 2
THEN 'Branco'
WHEN 3
THEN 'Amarelo'
ELSE 'Verde'
END
FROM dual;
SELECT
CASE
WHEN V_NM_COR = 1
THEN 'Azul'
WHEN V_NM_COR = 2
THEN 'Branco'
WHEN V_NM_COR = 3
THEN 'Amarelo'
ELSE 'Verde'
END
FROM dual;