[firebase-br] ajuda com stored procedure

Anderson Miranda Barrozo andersonpaduarj em gmail.com
Qui Maio 7 19:44:58 -03 2009


Boa noite Reijaneio,

        Não sei se com essas orientações resolveu, mas lembra que ontem te
comentei. Independente de tudo vc debugou aplicação para verificar se no
laço esta passando pelo numero que registro que seria o correto, ou seja, se
tem 5 registro tá dando 5 loop ?

Anderson Miranda

2009/5/7 Sandro Souza <escovadordebits em gmail.com>

> Bom dia/tarde Reijanio.
>
> Grande Reijanio, acredito que o código UPDATE que está nessa stored
> procedure necessite de um pequeno ajuste.
>
> O SELECT verifica se já existe um registro na tabela de ESTOQUE com o
> código
> do produto e do local informados, mas se já constar, você não está apenas
> atualizando a quantidade disponível daquele mesmo registro, o UPDATE como
> está ali, está trocando o código do local de todos os registros que tenham
> o
> mesmo código de produto, assim como atualizando as quantidades disponíveis
> de todos eles.
>
> Tente substituir apenas aquele código UPDATE, desse:
>
> UPDATE ESTOQUE
> SET
> COD_LOCAL = :COD_LOCAL,
> QTDE_DISP = QTDE_DISP +:QTDE_DISP
> WHERE (CODPROD =:CODPROD);
>
> Para esse:
>
> UPDATE ESTOQUE SET
>   QTDE_DISP = QTDE_DISP +:QTDE_DISP
> WHERE
>  (CODPROD =:CODPROD)AND
>  (COD_LOCAL = :COD_LOCAL);
>
> Dessa nova forma, apenas aquele exato registro que já existe com o código
> de
> produto e local informados será atualizado, e não mais todos os outros
> registros do mesmo produto.
>
> Espero ter ajudado mais que atrapalhado. :D
>
> 2009/5/7 Reijanio Nunes Ribeiro <rnribeiro em gmail.com>
>
> > bom dia a todos estou com um pequeno problema e gostaria de sua ajuda
> > tenho a seguinte sp e funciona sem problemas pra um item so mais qdo é
> mais
> > de um item fica meio dificil gostaria da ajuda de vc's, ficarei grato se
> > puderem ajudar
> >
> > a sintaxe é a seguinte
> >
> > SET TERM ^ ;
> >
> > CREATE PROCEDURE UPD_INS_ESTOQUE (
> >    codprod varchar(18),
> >    cod_local char(3),
> >    qtde_disp numeric(10,2))
> > as
> > BEGIN
> > if (EXISTS(SELECT CODPROD FROM ESTOQUE WHERE(CODPROD = :CODPROD)AND
> > (COD_LOCAL = :COD_LOCAL))) then
> > UPDATE ESTOQUE
> > SET
> > COD_LOCAL = :COD_LOCAL,
> > QTDE_DISP = QTDE_DISP +:QTDE_DISP
> > WHERE (CODPROD =:CODPROD);
> > ELSE
> > INSERT INTO ESTOQUE(
> > CODPROD,
> > COD_LOCAL,
> > QTDE_DISP)
> > VALUES
> > (
> > :CODPROD,
> > :COD_LOCAL,
> > :QTDE_DISP);
> > END^
> >
> > SET TERM ; ^
> >
> >
> > e a chamda nessa procedure é feita assim nela tem um laço no dataset
> > temporário que antes funcionava bem usando uma senteça sel update, mais
> com
> > a sp n ta funcionando
> >
> > procedure TF_Mov_Estoq.atlz_estoque;
> > begin
> > if rbmov.Value = 'E' then
> > begin
> >
> >    while not (cds_m_stoq.Eof) do //Cds_m_stoq = clientdataset temporário
> >    begin
> >    sp_up_ins.Params[0].AsString := Cds_M_StoqCODPROD.AsString;
> >    sp_up_ins.params[1].AsString := Dbedit2.Field.AsString;
> >    sp_up_ins.params[2].AsFMTBCD := cds_M_StoqQTDE.AsBCD;
> >    sp_up_ins.execproc;
> >    cds_m_stoq.Next;
> >    f_dmm.Estoque.Close;
> >  f_dmm.Estoque.Open;
> >
> >    end;
> > se tirar o laço funciona mais so pra um item o que seria melhor nesse
> caso
> > colocar uma trigger pra chamar essa sp, não sei poderiam me ajudar
> > ______________________________________________
> > 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
>



-- 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AS Informática
Anderson Miranda Barrozo
(22) 8115-8761
MSN: andersonpaduarj em hotmail.com



Mais detalhes sobre a lista de discussão lista