[firebase-br] Triggers para tabela de acumuladores

Joel do Prado Junior joel em gerasoft.com.br
Qua Set 21 20:49:34 -03 2005


Acho que isso resolve o seu problema.

A única coisa que faltou nesta trigger é colocr para múltiplas ações, 
como eu utilizo o FB 1.0 eu só coloquei o AFTER INSERT.

SET SQL DIALECT 3;

SET NAMES WIN1252;


SET TERM ^ ;

CREATE TRIGGER VENDASDIA FOR VENDAS
ACTIVE AFTER INSERT POSITION 0
as
 declare variable Cod_Produto Integer;
 declare variable Data_Venda  Date;
 declare variable x Integer;
 declare variable TotalQuantidade Integer;
 declare variable TotalValor Numeric(15,2);
begin
 select
   Cod_Produto,
   Data_Venda,
   count(*),
   sum(Quantidade),
   sum(Valor)
 from
   Vendas
 where
   (Data_Venda=New.Data_Venda)
 group by
   Cod_Produto,
   Data_Venda
 into
   :Cod_Produto,
   :Data_Venda,
   :x,
   :TotalQuantidade,
   :TotalValor;
  if (x=1) then
    begin
      insert into Vendas_Dia(Cod_Produto,Data_Venda,Quantidade,Valor) 
Values(:Cod_Produto,:Data_Venda,:TotalQuantidade,:TotalValor);
    end
  else if (x>1) then
    begin
      update Vendas_Dia set 
Quantidade=:TotalQuantidade,Valor=:TotalValor where 
(Cod_Produto=:Cod_Produto) and (Data_Venda=:Data_Venda);
    end
  else if (x=0) then
    begin
      delete from Vendas_Dia where (Cod_Produto=:Cod_Produto) and 
(Data_Venda=:Data_Venda);
    end
end
^


SET TERM ; ^


Juarez - HS - Softwares escreveu:

> Oi Joel, obrigado pela resposta, mas veja.. eu realmente preciso fazer 
> isso, segundo, as triggers não garantem consistência dos dados? Eu 
> estou vendo vários conselhos de que eu não devo fazer mas sabe quando 
> recebemos instruções para fazer e não podem ser questionadas? Então 
> solicito ajuda para poder resolver isso da melhor maneira possivel 
> utilizando triggers.
>  
> Abraços
>  
> Juarez.
>  
>  
>
>     ----- Original Message -----
>     *From:* Joel do Prado Junior <mailto:joel em gerasoft.com.br>
>     *To:* FireBase <mailto:lista em firebase.com.br>
>     *Sent:* Wednesday, September 21, 2005 6:29 PM
>     *Subject:* Re: [firebase-br] Triggers para tabela de acumuladores
>
>     Tem certeza que você precisa da tabela VENDAS_DIA ?
>
>     Possíveis problemas com o uso da tabela VENDAS_DIA.
>     - Inconsistência nos dados entre a VENDAS_DIA e a VENDAS
>     - Mais Tabela no banco
>     - Mais Trigger no banco
>
>     Vantagens sem o uso da tabela VENDAS_DIA.
>     - Consistência nas informações
>     - Quando você precisar dos dos por dia faça um select agrupado por
>     data
>
>
>     Juarez - HS - Softwares escreveu:
>
>     >Eu tenho duas tabelas com a seguinte estrutura 
>     > 
>     >TABLE -> VENDAS 
>     >------------------------------------------ 
>     >COD_PRODUTO  INTEGER 
>     >QUANTIDADE INTEGER 
>     >VALOR NUMERIC(12,2)
>     >DATA_VENDA DATE 
>     > 
>     > 
>     > 
>     > 
>     >TABELA VENDAS_DIA
>     >----------------------------------- 
>     >DATA_VENDA DATE 
>     >COD_PRODUTO INTEGER
>     >QUANTIDADE INTEGER 
>     >VALOR NUMERIC(12,2)
>     > 
>     > 
>     >como criar uma trigger para acumular os valores dos produtos
>     vendidos na tabela VENDAS_DIA sem perder registros, criando
>     registros novos para cada dia novo e em caso de alterar os dados
>     não haver inconsistência de informações? Meu maior problema é
>     validar se não já foi lançado um produto para a data do dia
>     utilizando uma trigger e como tratar as alterações de registros de
>     forma consistente.
>     >
>     >
>     >Obrigado,
>     >
>     >Juarez A. Mendes.com.br/pesquisa <http://firebase.com.br/pesquisa>
>




Mais detalhes sobre a lista de discussão lista