[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