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

Eduardo Jedliczka jedyfb em gmail.com
Seg Nov 30 10:38:50 -03 2009


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





Mais detalhes sobre a lista de discussão lista