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

Isael Faria Junior isael em stetika.com.br
Seg Nov 30 12:29:00 -03 2009


Pelo, que entendi ele quer comparar valores de old e new, que da para 
fazer num while utilizando a estrutura da tabela para saber quais campos 
foram alterados.

Eduardo Jedliczka escreveu:
> 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
>>     
>
>
> ______________________________________________
> 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