update com base em outra tabela
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
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
Curtidas 0
Respostas
Emerson Nascimento
24/01/2006
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 ?
uma pergunta:
o que é passado no parâmetro :d ?
GOSTEI 0
Marcos Fernando
24/01/2006
d: é a data base para procura, tipo passe nas entradas e pegue as datas => 01/11/05 até agora
GOSTEI 0
Marcos Fernando
24/01/2006
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
GOSTEI 0
Emerson Nascimento
24/01/2006
no SQL Server existe o ´update from´, cuja sintaxe, aplicada ao seu caso, seria:
acho que no FB você precisará repetir a instrução...
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 ) )
GOSTEI 0
Rodolpho123
24/01/2006
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
GOSTEI 0