sexta-feira, 14 de novembro de 2014

Expressões Condicionais

Várias vezes você precisa utilizar a lógica IF-THEN-ELSE em uma consulta, por questões de regra de negócio por exemplo. A expressão CASE e a função DECODE resolvem essa necessidade, sendo a função DECODE exclusiva da sintaxe Oracle,  a expressão CASE está de acordo com o padrão ANSI SQL.

CASE

Sintaxe:

Sintaxe CASE


Quando você utiliza a expressão CASE o servidor verifica as condições, na ordem, a primeira expressão verdadeira é a que terá o valor da cláusula THEN retornado, caso nenhuma condição seja verdade e existir um valor default definido na cláusula ELSE esse valor será retornado, caso nenhuma condição seja verdadeira e não exista valor default definido o valor null é retornado.

Veja o exemplo abaixo, digamos que o departamento pessoal solicita uma consulta onde você deverá exibir em que nível de carreira um funcionário se enquadra de acordo com o salário dele, a regra é:

Nível de carreira Júnior para salários até 3.000,00R$, Pleno para salários entre 3.000,01R$ à 5.000,00R$, Sênior para salários entre 5.000,01R$ à 7.000,00R$, Gerente para salários entre 7.000,01R$ à 10.000,00R$, caso nenhuma das condições fossem verdadeiras o nível de carreira em questão é o de Diretor. A regra foi aplicada na consulta da seguinte forma:


DECODE

Sintaxe:


A função DECODE também implementa a lógica IF-THEN-ELSE, o valor da coluna ou expressão passada no primeiro parâmetro será comparada ao search1, se for igual o result1 será retornado, assim será para todos os outros pares de parâmetros listados na função, você também pode definir um valor default, que será retornado se a comparação não satisfazer nenhum critério de busca listado nos parâmetros, se não existir valor default definido será retornado null. A diferença com a expressão CASE é que no DECODE você não consegue fazer comparações usando testes lógicos diferente do da igualdade, como no exemplo dado no CASE, onde um teste lógico diferente do teste de igualdade é feito na cláusula WHEN (WHEN SALARIO BETWEEN 3000.01 AND 5000 THEN...), é feito um teste considerando um conjunto de valores.

No exemplo abaixo, o caso seria nomear o departamento de acordo com o ID, existe a tabela DEPARTAMENTOS que contém a descrição de cada departamento, mas suponha que você queira uma descrição diferente da "oficial":

Para DEPARTAMENTO_ID igual a 3, teremos o a descrição "MANDA-CHUVA", para DEPARTAMENTO_ID igual a 5, teremos a descrição "PEÃO" e os demais casos serão listados como "NOT FOUND".



É isso aí. Espero ter ajudado! =)

4 comentários: