UPDATE COM O RESULTADO DE UMA CONSULTA

USUARIO.EXCLUIDOS 26/04/2007 10:47:43
#213833
BOM DIA GALERA,
PRECISO FAZER UM UPDATE USANDO O RESULTADO DE UMA CONSULTA (SELECT COM VARIOS REGISTROS) USANDO TAMBEM A INSTRUÇÃO WHERE.. ALGUEM SABE COMO FAZER?
EU SEI QUE SINTAXE PARA ESTA SITUAÇÃO é A SEGUINTE:
UPDATE NOME_TABELA
SET (CAMPO1, CAMPO2, CAMPO3) = (SELECT V.VENDA, V.QTDE, V.LUCRO
FROM VENDA V
WHERE V.LOJA = 1)
MAS COMO O RESULTA ME TRARÁ MAIS DE UM REGISTRO EU PRECISO USAR A INSTRUÇÃO WHERE...ALGUEM JÁ FEZ ISTO ALGUMA VEZ?

VALEU
CLEVERTON 26/04/2007 11:00:41
#213837
Opa!!!

Tente assim

UPDATE NOME_TABELA (CAMPO1, CAMPO2, CAMPO3) SELECT V.VENDA, V.QTDE, V.LUCRO FROM VENDA V WHERE V.LOJA = 1

USUARIO.EXCLUIDOS 26/04/2007 11:17:20
#213842
UPDATE NOME_TABELA
SET CAMPO1=(SELECT V.VENDA, V.QTDE, V.LUCRO
FROM VENDA V
WHERE V.LOJA = 1),
SET CAMPO2=(SELECT V.VENDA, V.QTDE, V.LUCRO
FROM VENDA V
WHERE V.LOJA = 1),
SET CAMPO3=(SELECT V.VENDA, V.QTDE, V.LUCRO
FROM VENDA V
WHERE V.LOJA = 1)

WHERE CONDICAO

'SO QUE é O SEGUINTE, SE SEU SELECT RETORNA MAIS DE UMA LINHA QUE FAZER UM CURSOR
USUARIO.EXCLUIDOS 26/04/2007 11:21:58
#213845
Cleverton não pode ser assim, porque cada resultado deverá ser gravado num registro especifico.
Este Update funciona perfeitamente assim...veja pq:

update ricoy.venda_movel v
set (v.vm_venda, v.vm_qtde, v.vm_lucro) =
(select sum(v.venda) Venda, sum(v.Qtde) Qtde,sum(v.lucro) Lucro
from ricoy.venda_movel v,
(select vm.loja_key,
vm.subgrupo_key,
vm.data_movimento,
vm.venda_movel_key
from ricoy.venda_movel vm
where vm.venda_movel_key =2493704 'chave primaria
order by vm.loja_key, vm.data_movimento) v2
where v.loja_key = v2.loja_key
and v.subgrupo_key = v2.subgrupo_key
and v.data_movimento between v2.data_movimento - 28 and v2.data_movimento
group by v2.venda_movel_key)
where v.venda_movel_key = 2493704 'chave primaria

Repare que eu estou identificando aonde deve ser gravado este registro, ou seja, numa linha especifica. Agora suponha que na subconsulta ao enves de resultar somente uma linha resultasse varias... Na condição Where do UPDATE, eu precisaria informar onde será gravado cada resultado. Como faço isso?

Grato

USUARIO.EXCLUIDOS 26/04/2007 11:26:57
#213847
Alexandre,
Não dá para gravar tres informações no mesmo campo como vc citou. E mesmo assim eu ainda teria que fazer a mesma consulta mais de uma vez, perderia tempo.
Veja o que escrevi acima...o script que descrevi esta funcionando desta forma, só preciso adapta-lo para não precisar usar cursor..
Valeu
USUARIO.EXCLUIDOS 26/04/2007 17:10:21
#213919
ismael, acho que sem cursor vc nao vai conseguir, é por isso que temos os cursores ok.
Tópico encerrado , respostas não são mais permitidas