[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