[firebase-br] Obter valores das colunas NEW e OLD nas triggers de forma dinâmica

Eduardo Jedliczka jedyfb em gmail.com
Seg Nov 30 11:53:21 -03 2009


Isael, 

trigger de log é uma coisa relativamente simples, e muitos membros desta
lista já utilizam isto (de várias formas diferentes), embora um artigo
(se já não existir um na FireBase) sempre seja de boa utilidade para os
menos experimentados no uso do banco.

Porém, pelo que eu percebo, ou autor do post quer  checar (e alterar) em
run-time o valor dos campos dentro de uma trigger , e isto NÃO DÁ para
fazer. Mas dá para fazer uma SP criar a trigger com todas as comparações
que ele quer, mas aí ela deixaria de ser dinâmica. 

Exemplo: ele tem 7 campos chamados DIA01, DIA02, DIA03, DIA05, DIA05,
DIA06 e DIA07, e quer fazer um while para correr os 7 dias comparando os
valores de new e old.

Abraço

Eduardo Jedliczka

Em Seg, 2009-11-30 às 11:29 -0200, Isael Faria Junior escreveu:

> eu faço essa trigger de log deste a versão do firebird 1.5  e funciona.
> Caso, o Cantu queira publica no site, pode ele pode me falar.
> como disse e preciso apenas ter a estrutura da tabela, o que obtido 
> atraves de um select .
> Mais acho que ficaria mais facil de entender em um artigo do que 
> postando somente o codigo da mesma.
> 
> Eduardo Jedliczka escreveu:
> > No firebird não existe macrosubstituição, mas existe o execute statement
> > (que é um comando SQL dentro de uma variável string que pode ser montada
> > dinamicamente).
> >
> > porém é muito perigoso usar o execute statement dentro de uma trigger
> > para operações de insert, delete ou update.
> >
> > Como seu exemplo está aparentemente incompleto e não tem nenhuma
> > utilidade prática (pois é só definir um campo como not null com default
> > ZERO), não consegui entender exatamente a sua necessidade, mas
> > definitivamente, uma abordagem de 7dias da semana, 12 meses do ano ou 31
> > dias do mês em campos separados de uma mesma tabela, não me parece ser
> > uma modelagem correta (além de ser extremamente repetitivo para se
> > trabalhar). Se for este o caso, recomendo remodelar o seu sistema.
> >
> > porém se esta tabela está com esta estrutura simplesmente para
> > simplificar algum relatório ou consulta na tela, sugiro que grave os
> > dados da forma correta, e crie uma SP para obter esta "tabela de
> > consulta".
> >
> > outra coisa, qual é a versão do Firebird que você está usando ?
> >
> > abraço
> >
> > Eduardo
> >
> > Em Sáb, 2009-11-28 às 12:26 -0200, Richard Brosler escreveu:
> >
> >   
> >> Olá Pessoal, haveria a possibilidade de obter nas triggers os valores dos
> >> campos com os prefixos NEW ou OLD de forma dinâmica dentro de um gatilho.
> >>
> >> Por exemplo a tabela:
> >>
> >> condicoes_pgto
> >> codigo integer (pk)
> >> dia01 integer
> >> dia02 integer
> >> dia03 integer
> >> dia04 integer
> >> dia05 integer
> >> dia06 integer
> >> dia07 integer
> >>
> >> no gatilho colocaria assim:
> >>
> >> create trigger trg_condicoes_pgto for condicoes_pgto active before insert
> >> position 0 as
> >>  declare variable dia integer;
> >> begin
> >>   dia=1;
> >>   while dia<8 do
> >>     begin
> >>       New."dia0"||dia=coalesce(New."dia0"||dia,0); coloquei dessa forma pois
> >> não sei como fazer isso de forma dinâmica
> >>       dia=dia+1;
> >>     end;
> >> end;
> >>
> >> Na verdade coloquei uma suposição para a utilização, o que estou tentando
> >> fazer é uma trigger padrão para poder ser utilizada em qualquer das minhas
> >> entidades.
> >> Há esse recurso disponível no firebird? tentei com rdb$get_context e
> >> rdb$set_context, mas não consegui nada. :s 
> >>
> >> Abraços, 
> >>
> >> Richard Brosler.
> >>
> >>
> >> ______________________________________________
> >> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> >> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> >> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >>     
> >
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
> >   
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista