Fórum update com base em outra tabela #54946

24/01/2006

0

Galera preciso fazer um update na tabela produtos para achar o unitário conf. as entradas, a SP que acha o unitario é sp_p_unitario, mais não esotou tendo exito na construção da SQL, ficou mais ou menos assim:


update estoque set
vlr_estoque = (sp_p_unitario.unitario*estoque)
where exists(select indice, unitario from sp_p_unitario(:d) where estoque.indice=sp_p_unitario.indice)


como posso fazer?

thanks


Marcos Fernando

Marcos Fernando

Responder

Posts

24/01/2006

Emerson Nascimento

da forma que você fez, a SP só é reconhecida pelo where e não pela instrução toda. por isso você não pode usá-la no [i:cc086b8689]set[/i:cc086b8689] (além de a sua instrução não relacionar a SP com a tabela de estoque, o que irá gerar erro).

uma pergunta:
o que é passado no parâmetro :d ?


Responder

Gostei + 0

24/01/2006

Marcos Fernando

d: é a data base para procura, tipo passe nas entradas e pegue as datas => 01/11/05 até agora


Responder

Gostei + 0

24/01/2006

Marcos Fernando

da forma que você fez, a SP só é reconhecida pelo where e não pela instrução toda. por isso você não pode usá-la no set 


mais como faço então?

(além de a sua instrução não relacionar a SP com a tabela de estoque, o que irá gerar erro). 


update estoque set
vlr_estoque = (sp_p_unitario.unitario*estoque)
where exists(select indice, unitario from sp_p_unitario(:d) [color=red:6a6a67f934]where estoque.indice=sp_p_unitario.indice) [/color:6a6a67f934]


thanks


Responder

Gostei + 0

24/01/2006

Emerson Nascimento

no SQL Server existe o ´update from´, cuja sintaxe, aplicada ao seu caso, seria:
update
  est
set
  est.vlr_estoque = (spp.unitario * est.estoque)
from
  estoque est
inner join
  sp_p_unitario( :d ) spp on (spp.indice = est.indice)


acho que no FB você precisará repetir a instrução...
update
  estoque
set
  vlr_estoque = (select max(sp_p_unitario.unitario) 
                 from sp_p_unitario( :d )
                 where sp_p_unitario.indice = estoque.indice) * estoque
where estoque.indice in 
   (select sp_p_unitario.indice
    from sp_p_unitario( :d ) )



Responder

Gostei + 0

31/01/2006

Rodolpho123

Isso aí vc só vai conseguir em uma SP, criando um cursor e depois atualizando conforme o seu s valores, ex:
for select codcliente1, nome1 from clientes1
into :codcliente, :nome
do
begin
   update
      clientes2
   set
     nome2 = :nome   
   where
     codcliente2 = :codcliente
end



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar