[firebase-br] Dúvida com trigger before insert

Andrei Luís compuvale.software em gmail.com
Qua Jan 23 12:17:21 -03 2013


Boa tarde a todos,

Estou com uma dúvida quanto ao funcionamento de triggers before insert.

Estou criando uma trigger para calcular os impostos dos itens das notas
fiscais. Esta trigger é before insert na tabela dos itens.

O problema é que o select que deveria trazer as infos da tabelas diversas
está trazendo tudo null, se rodo o select por fora da trigger, depois que a
mesma é acionada, o mesmo select traz todas as infos corretamente. Parece
que tem algo a ver com as transações, será?

Abaixo está a trigger modificada que fiz para testar, o calculo
new.subtotal = new.qtde * new.valor funciona. O insert também funciona, mas
os campos que estão recebendo valores depois do select estão ficando todos
null.

Alguém dá uma luz?

SET TERM ^ ;

CREATE OR ALTER TRIGGER NOTASFISCAISITENS_BI0 FOR NOTASFISCAISITENS
ACTIVE BEFORE INSERT POSITION 0
as
declare variable wbaseicm dinheiro;
declare variable wcfoptemp integer;
declare variable wnatureza_temp varchar(80);
declare variable wnrnf_temp integer;
declare variable wcliente_temp varchar(100);
declare variable wuf_temp char(2);
declare variable wncm_temp integer;
begin
   new.subtotal = new.qtde * new.valor;
   insert into new_table (nfi_id) values (new.registro_id);
   Select n.baseicm, n.registro_id, n.descricao, nf.nrnf, a.nome, uf.sigla,
cf.codfiscal
     from notasfiscaisitens        nfi
     left join pedidositens        pi on pi.registro_id = nfi.pedidoitem_id
     left join orcamentos          o  on o.registro_id  = pi.orcamento_id
     left join produtos                 p  on p.registro_id  =
nfi.produto_id
     left join notasfiscais             nf on nf.registro_id =
nfi.notafiscal_id
     left join naturezas                n  on n.registro_id  =
nf.natureza_id
     left join agenda              a  on a.registro_id  = nf.cliente_id
     left join uf                     on uf.sigla=a.uf
     left join classificacaofiscal cf on
cf.registro_id=p.classificacaofiscal_id
    where nfi.registro_id=new.registro_id
     into :wbaseicm, :wcfoptemp, :wnatureza_temp, :wnrnf_temp,
:wcliente_temp, :wuf_temp, :wncm_temp;
   new.cfop_temp = :wcfoptemp;
   new.natureza_temp = :wnatureza_temp;
   new.desconto = (new.Valor) * (:wdescontopercentual/100);
   new.nrnf_temp = :wnrnf_temp;
   new.cliente_temp = :wcliente_temp;
   new.uf_temp = :wuf_temp;
   new.ncm_temp = :wncm_temp;


end
^


SET TERM ; ^


[]s
Andrei



Mais detalhes sobre a lista de discussão lista