Trigger estilo checkbox

Firebird

10/03/2005

preciso criar uma Trigger para que em uma colona da tabela (que pode receber apenas 0 ou -1) fique sempre com apenas um único valor -1 e todos os outros 0.
Se conseguisse saber a linha que está sendo alterada, conseguiria fazer uma consulta na clausura where e pegar todos os registros menos o que foi alterado, mas não consegui.

Como faço uma trigger que altere todos os registros menos o que foi alterado?


Raserafim

Raserafim

Curtidas 0

Respostas

Fsflorencio

Fsflorencio

10/03/2005

Amigo,
É um negócio meio difícil de implementar isto por triggers, pois se em algum evento update eu alterar o próprio registro ele ficaria em looping, a não ser que vc use um generator como uma espécie de semáforo (isto funciona), mas uma maneira melhor seria no evento before update pegar um generator e alterar este campo com o valor dele.
Então no seu select pegaria o registro que tiver o campo com o maior valor, ex:

select first 1 * from tabela
order by campo_que_recebe_generator desc

//seria conveniente criar um índice para este campo.

Qualquer coisa estamos aí. :D


GOSTEI 0
Afarias

Afarias

10/03/2005

numa trigger after update da ´tabela´ coloque:

if (new.campo<>old.campo and new.campo = -1) then
  update tabela set campo = 0 where codigo <> new.codigo;



onde código é um campo chave da tabela

T+


GOSTEI 0
Raserafim

Raserafim

10/03/2005

deu certo afarias, valeu.

e vale salientar que esta trigger, apesar de simples é bastante interessante.


GOSTEI 0
POSTAR