Trigger estilo checkbox
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?
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
Curtidas 0
Respostas
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
É 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
10/03/2005
numa trigger after update da ´tabela´ coloque:
onde código é um campo chave da tabela
T+
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
10/03/2005
deu certo afarias, valeu.
e vale salientar que esta trigger, apesar de simples é bastante interessante.
e vale salientar que esta trigger, apesar de simples é bastante interessante.
GOSTEI 0