[firebase-br] RES: RES: Como consigo resolver
José mauricio Zottis
bzottis em ig.com.br
Ter Jan 19 08:43:00 -03 2010
Ou vc pode fazer a triger para a tabela de itens da venda, pois só irá ter
alguma coisa para somar, depois de inserir ou alterar na tabela dos itens da
venda.
No meu sistema eu faço assim:
CREATE TRIGGER TG_SOMA_PEDIDO FOR ITENS
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
begin
if (inserting) then
execute procedure sp_soma_pedido(new.pedidono) ;
else
if ((deleting) or (updating)) then
execute procedure sp_soma_pedido(Old.pedidono) ;
end;
CREATE PROCEDURE SP_SOMA_PEDIDO (
pedido_no integer)
as
declare variable total_itens numeric(15,2);
declare variable peso_total double precision;
declare variable total_frete numeric(15,2);
declare variable soma_quantidade double precision;
begin
SELECT
SUM(unitario * QUANTIA * (100 - desconto)/100),
SUM(PESO * QUANTIA),
SUM(FRETE * QUANTIA),
SUM(QUANTIA)
FROM iTENS
WHERE (pedidono = :pedido_no)
INTO :total_itens, :PESO_TOTAL,: TOTAL_FRETE,
:TOTAL_DESCONTO_ITENS, :soma_quantidade;
Você pode usar o coalesce também para não retornar null
if (:total_itens is null) then TOTAL_ITENS = 0;
if (:PESO_TOTAL is null) then PESO_TOTAL = 0;
if (:total_frete is null) then Total_FRETE = 0;
if (:soma_quantidade is null) then soma_quantidade = 0.00;
UPDATE pedidos
SET totalitens = :total_itens,
pesototal = :peso_total,
freteitens = :total_frete,
total_quantia = :soma_quantidade,
where pedidono = :pedido_no;
end
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Jose Aparecido da Silva
Enviada em: segunda-feira, 18 de janeiro de 2010 23:27
Para: 'FireBase'
Assunto: [firebase-br] RES: Como consigo resolver
Você está tentando alterar a tabela de venda novamente e isso irá provocar
erro.
Se entendi o que você quer, faz assim:
Mude a trigger para before.
CREATE trigger trg_somavenda_pbruto for venda
active before update position 0
AS
declare variable total numeric(15,4);
begin
select sum(totalliq)from itemvenda I
where I.codvenda = new.codvenda
into :total;
if(coalesce(total,0) > 0)then new.pbruto = total;
[ ]'s
Jose Aparecido da Silva
Fasystem
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Jose Luiz de Medeiros
Enviada em: segunda-feira, 18 de janeiro de 2010 22:27
Para: lista em firebase. com. br
Assunto: [firebase-br] Como consigo resolver
Colegas..
Tenho numa tabela de venda o campo PBRUTO, que preciso somar os itens
referentes a aquela venda. Tentei criar essa trigger mas não deu certo.
Consigo cria-la mas quando rodo me da um erro:
CREATE trigger trg_somavenda_pbruto for venda
active after update position 0
AS
declare variable total numeric(15,4);
begin
select sum(totalliq)from itemvenda I
where I.codvenda = old.codvenda
into :total;
if(:total is null)then
total = 0.00;
if(:total > 0)then
begin
update venda v set v.pbruto = :total
where
v.codvenda = old.codvenda;
end
end
Como sou novo em Firebird, alguém poderia me dizer se faço isso usando
trigger ou procedure, se for trigger me dizer onde eu errei?
Grato:
Jose Luiz
______________________________________________
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
Nenhum vírus encontrado nessa mensagem recebida.
Verificado por AVG - www.avgbrasil.com.br
Versão: 9.0.730 / Banco de dados de vírus: 270.14.150/2632 - Data de
Lançamento: 01/19/10 05:34:00
Mais detalhes sobre a lista de discussão lista