[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