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

W O sistemas2000profesional em gmail.com
Qui Out 3 10:49:04 -03 2013


El comando no es INSERT OR UPDATE, el comando es UPDATE OR INSERT

Saludos.

Walter.



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

> 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
>
>
> ______________________________________________
> 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