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

Rafael SGBr Sistemas rafael em sgbr.com.br
Qui Out 3 09:30:35 -03 2013


Olá Gladiston, obrigado pelo auxílio, tentei colocar o insert or update mas
o ibexpert nem reconhece, eu tentei assim:
insert or update 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);

Qual seria a forma correta de usar?
Obrigado.
Rafa
-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Gladiston
Santana
Enviada em: quinta-feira, 3 de outubro de 2013 09:06
Para: FireBase
Assunto: Re: [firebase-br] Peço ajuda com erro em SP e Trigger FB2.52 +
Ibexpert

É dificil diagnosticar se não temos os seus dados, além disso, por email sua
procedure é detonada pelo formatador html.
Seria interessante que todos colocassem porções de código em sites como
pastebin.com e datasse para expirar em 1 semana, tempo mais que suficiente
para alguem realmente ajudar.

Parece que eu entedi o seu proposito e se eu entedi direito, voce deveria
remover o bloco que verifica a existencia da informação e decide por insert
ou update, e acrescentar em seu lugar uma unica instrução :

INSERT OR UPDATE(CAMPO1,CAMPO2,...CAMPO10)
VALUES(:PCAMPO1,:PCAMPO2,...,:PCAMPO10)
MATCHING(CAMPO1)

onde campo1 é PK.
Seu codigo ficaria mais simples e mais rápido.


2013/10/3 Rafael SGBr Sistemas <rafael em sgbr.com.br>

> 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,:s
> ituaca
> 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,decimaisva
> loruni
> tario=:decimaisvalor,
> coditemorcamento=:coditemorcamento,coditempedidovenda=:coditempedidove
> nda,
>
>     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,n
> ew.val
> oracrescimo,
>
>
>
> new.totalliquido,new.situacaotributaria,new.aliquota,new.cancelado,new
> .decim 
> aisqtde,new.decimaisvalorunitario,null,new.controle,null,null,new.md5d
> av);
>
> 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
>
> ______________________________________________
> 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





Mais detalhes sobre a lista de discussão lista