Função CASE Simples e CASE Pesquisada

Oracle

07/10/2014

Pessoal, por favor, alguém poderia esclarecer a seguinte dúvida:

Qual a real diferença entre a função CASE Simples e CASE Pesquisada do Oracle?
No meu ponto de vista, tudo o que eu faço com Case Simples eu consigo fazer com Case Pesquisada e vice-versa.
Tem algum momento específico que terei que utilizar um método ou outro?
Segue um exemplo de ambas:

--CASE Simples
SELECT LAST_NAME, HIRE_DATE, 
       TRUNC(MONTHS_BETWEEN(SYSDATE,HIRE_DATE)/12) YEARS,
       TRUNC(MONTHS_BETWEEN(SYSDATE,HIRE_DATE)/60) "YEARS DIVIDED BY 5",
       CASE TRUNC(MONTHS_BETWEEN(SYSDATE,HIRE_DATE) / 60)
         WHEN 0 THEN 'Intern'
         WHEN 1 THEN 'Junior'
         WHEN 2 THEN 'Intermediate'
         WHEN 3 THEN 'Senior'
         ELSE 'Furniture'
       END LOYALTY
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN (60,10);

--CASE Pesquisada
SELECT LAST_NAME, HIRE_DATE, 
      TRUNC(MONTHS_BETWEEN(SYSDATE,HIRE_DATE)/12) YEARS,
      TRUNC(MONTHS_BETWEEN(SYSDATE,HIRE_DATE)/60) YEARS,
      CASE
        WHEN TRUNC(MONTHS_BETWEEN(SYSDATE,HIRE_DATE)/60) < 1 THEN 'Intern'
        WHEN TRUNC(MONTHS_BETWEEN(SYSDATE,HIRE_DATE)/60) < 2 THEN 'Intern'
        WHEN TRUNC(MONTHS_BETWEEN(SYSDATE,HIRE_DATE)/60) < 3 THEN 'Intern'
        WHEN TRUNC(MONTHS_BETWEEN(SYSDATE,HIRE_DATE)/60) < 4 THEN 'Intern'
        ELSE 'Furniture'
      END LOYALTY
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN (60,10);


Eu utilizo o Oracle 11g
Marcus Almeida

Marcus Almeida

Curtidas 0

Respostas

Jair N.

Jair N.

07/10/2014

Bom Dia olha só, vendo que o princípio é o mesmo, mas sugestivamente diferente, nunca soube que se no uso do método, possa ocasionar resultados diferentes, apenas dando a chamada CASE a opção de como se deve utilizar. Acho que fica a critério e de acordo com a necessidade de cada um por sugestão seria a ordem dos fatores.
GOSTEI 0
Marcus Almeida

Marcus Almeida

07/10/2014

Surgiu a dúvida estudando para certificação, realmente não consegui ver diferencia na utilização de uma ou outra, talvez tenha um desempenho em processamento de grande quantidade de informações más ainda não sei se tem alguma regra de uso para cada tipo
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

07/10/2014

Interessante a tua pergunta Marcus!
Também gostaria de saber se existe alguma diferença...
A primeira coisa que pensei é que a diferença possa estar na execução do SQL, talvez o Oracle trate elas de forma diferente e talvez influencie em performance ou alguma coisa assim.
Será q tem fundamento isso?
GOSTEI 0
POSTAR