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.