[firebase-br] Peço ajuda com erro em SP e Trigger FB2.52 + Ibexpert

Rafael SGBr Sistemas rafael em sgbr.com.br
Qui Out 3 08:53:26 -03 2013


Olá pessoal, estou com um problema, vejam a stored procedure:

SET TERM ^ ;

create or alter procedure SPINSEREDAVD3 (

    CONTROLE integer,

    NUMERODAV varchar(13),

    DATA date,

    CODITEM integer,

    CODPRODUTO integer,

    PRODUTO varchar(100),

    QTDE decimal(15,2),

    UN varchar(3),

    VALORUNITARIO decimal(15,2),

    VALORDESCONTOITEM numeric(15,2),

    VALORACRESCIMOITEM numeric(15,2),

    TOTALLIQUIDO decimal(15,2),

    SITUACAOTRIBUTARIA varchar(1),

    ALIQUOTA numeric(15,2),

    CANCELADO varchar(1),

    DECIMAISQTDE integer,

    DECIMAISVALOR integer,

    CODITEMORCAMENTO integer,

    CODITEMPEDIDOVENDA integer,

    CODITEMCONDICIONAL integer,

    CODITEMOS integer,

    MD5ITEMDAV varchar(100))

as

declare variable QTDEDAVENCONTRADO integer;

begin

  if (:coditemcondicional is not null) then

      SELECT count(*) FROM tdavd3 WHERE numerodav = :numerodav and
coditemcondicional = :coditemcondicional

      into qtdedavencontrado;

  if (:coditemorcamento is not null) then

      SELECT count(*) FROM tdavd3 WHERE numerodav = :numerodav and
coditemorcamento = :coditemorcamento

      into qtdedavencontrado;

  if (:coditemos is not null) then

      SELECT count(*) FROM tdavd3 WHERE numerodav = :numerodav and coditemos
= :coditemos

      into qtdedavencontrado;

  if (:coditempedidovenda is not null) then begin

      SELECT count(*) FROM tdavd3 WHERE numerodav = :numerodav and
coditempedidovenda = :coditempedidovenda

      into qtdedavencontrado;

      if (qtdedavencontrado = 0) then begin

/*exception aviso('insert coditempedidovenda = ' || :coditempedidovenda ||
'numero dav = ' || :numerodav);*/

        insert into tdavd3 values(:controle,:data,:numerodav, :data,
:coditem,:codproduto,:produto,:qtde,:un,
:valorunitario,:valordescontoitem,:valoracrescimoitem,:totalliquido,:situaca
otributaria,

        :aliquota,:cancelado,:decimaisqtde,:decimaisvalor,
:coditemorcamento,:coditempedidovenda,:coditemcondicional,:coditemos,
:md5itemdav);

      end

  end

  if (qtdedavencontrado > 0) then begin

    update  tdavd3 set controle = controle,datahoracadastro=
:data,numerodav=:numerodav,
datainclusao=:data,numeroitem=:coditem,codproduto=:codproduto,produto=:produ
to,qtde=:qtde,un=:un,

 
valorunitario=:valorunitario,descontoitem=:valordescontoitem,acrescimoitem=:
valoracrescimoitem,valortotalliquido=:totalliquido,situacaotributaria=:situa
caotributaria,aliquota=:aliquota,

 
indicadorcancelamento=:cancelado,decimaisqtde=:decimaisqtde,decimaisvaloruni
tario=:decimaisvalor,
coditemorcamento=:coditemorcamento,coditempedidovenda=:coditempedidovenda,

    coditemcondicional=:coditemcondicional,coditemos=:coditemos,
md5itemdav=:md5itemdav where numerodav = :numerodav and coditempedidovenda =
:coditempedidovenda;

 

exception aviso('update coditempedidovenda = ' || :coditempedidovenda ||
'numero dav = ' || :numerodav);

  end

  suspend;

end^

SET TERM ; ^

 

A chamada dela é feita pela trigger:

SET TERM ^ ;

CREATE OR ALTER TRIGGER TITEMPEDIDOVENDA_AU0 FOR TITEMPEDIDOVENDA

ACTIVE BEFORE UPDATE POSITION 0

AS

begin

  if (updating) then

/*exception aviso('trigger insert coditempedidovenda = ' || new.controle||
'numero dav = ' || new.numerodav);*/

    execute procedure
spinseredavd3(null,new.numerodav,new.datahoracadastro,new.coditem,new.codpro
duto,new.produto,new.qtde,new.un,new.valorunitario,new.valordesconto,new.val
oracrescimo,

 
new.totalliquido,new.situacaotributaria,new.aliquota,new.cancelado,new.decim
aisqtde,new.decimaisvalorunitario,null,new.controle,null,null,new.md5dav);

end

^

SET TERM ; ^

 

O problema é que na primeira vez que crio o registro ele fica certo, na
segunda vez ele sobrescreve os registros da tabela tdavd3 e troca todas
informações, inclusive duplicando a informação, recorro a lista pois não
entendo muito de sql.

Agradeço a ajuda desde já.

Rafa




Mais detalhes sobre a lista de discussão lista