Mostrando postagens com marcador Firebird. Mostrar todas as postagens
Mostrando postagens com marcador Firebird. Mostrar todas as postagens

domingo, novembro 25, 2007

Update usando Case

Dias atrás um colega meu de trabalho precisava realizar um UPDATE condicional, ou seja, atualizar o campo em função de outro campo. Ele logo disparou: "Dá pra usar CASE em UPDATE?".

Ficamos naquela, dá, não dá? Procuramos na net, fizemos um teste e vimos que era mesmo possível fazer isso. Confesso que nunca tinha usado isso, mas a instrução funciona que é uma beleza.

Pra mostrar como ficou a solução, vamos fazer um exemplo. Imagine que temos uma tabela de preços e precisamos ajustá-la da conforme abaixo

  1. Produtos com preço até R$ 100 sofrem reajuste de 5%;
  2. Produtos com preço de R$ 101 a R$ 500 sofrem reajuste de 3%;
  3. Produtos com preço acima de R$ 500 sofrem reajusto de 1,5%;
A intrução ficaria parecida como abaixo:

update tab_preco
set preco =
case
when preco <= 100
preco * 1.05
when preco > 100 and preco <= 500 then preco * 1.03 when preco > 500 then preco * 1.015
end


Como se vê, é muito simples e extremamente funcional. Poderia ter sido usado o valor de outro campo para a condição. Exemplo:

update tab_preco
set preco =
case grupo
when 'LIMPEZA' then preco * 1.05
when 'ALIMENTACAO' then preco * 1.1
when 'VESTUARIO' then preco * 1.05
else preco * 1.02
end


Até +