- Este tópico contém 15 respostas, 6 vozes e foi atualizado pela última vez 15 anos atrás por
Miro.
-
AutorPosts
-
30 de abril de 2010 às 11:59 pm #93834
Miro
ParticipanteOla gostaria de uma ajuda de como fazer um update buscando as informações de uma segunda tabela, onde a primeira tabela e a segunda se relacionam com um campos apenas, segue o que estou fazendo abaixo mas nao esta dando certo, se alguem puder contribuir fico grato
update tabela1
set tabela1.endrua = tabela2.endfil
from tabela1, tabela2
where tabela1.numemp = tabela2.numemp
and tabela1.numemp = 12
and tabela1.numcad = 2041 de maio de 2010 às 12:19 am #93839hudsona
ParticipanteMiro
Pesquise sobre o comando MERGE, ele resolve o seu probelma.
Tendo dúvidas poste aqui.Abraços!
3 de maio de 2010 às 5:33 am #93848Rodrigo Mesquita
Participanteveja esse link http://www.dbapool.com/articles/011007.html
3 de maio de 2010 às 9:04 pm #93863Miro
Participantefiz um script conforme orientação mas esta dando erro na tabela b, nao esta reconhecendo o campo
MERGE INTO r034cpl a
USING (select b.endfil
from r030fil) b
ON (a.numemp = b.numemp)
WHEN MATCHED THEN
update set a.endrua = b.endfil
where a.numemp = 12
and a.numcad = 204[quote=”hudsona”:16f89l4c]Miro
Pesquise sobre o comando MERGE, ele resolve o seu probelma.
Tendo dúvidas poste aqui.Abraços![/quote]
3 de maio de 2010 às 9:05 pm #93864charlles_jr
ParticipanteCaro Miro,
Updates não funcionam com junções de tabelas, tente fazer uma subquery.
Declare
Cursor c_SQL is
Select tabela1.endrua,
tabela2.endfil
from tabela1,
tabela2
where tabela1.numemp = tabela2.numemp
and tabela1.numemp = 12
and tabela1.numcad = 204;Begin
for v_SQL in c_SQL loop
update tabela1 set v_SQL.endrua = v_SQL.endfil;
end loop;
commit;
End;abs
Yves Plansson
4 de maio de 2010 às 1:36 am #93871diegolenhardt
Participanteo alias “b’ não deveria estar dentro do parentese?
assim…
MERGE INTO r034cpl a
USING (select b.endfil
from r030fil b)
ON (a.numemp = b.numemp)
WHEN MATCHED THEN
update set a.endrua = b.endfil
where a.numemp = 12
and a.numcad = 204
4 de maio de 2010 às 3:23 am #93872Rodrigo Mesquita
ParticipanteMiro,
Se a chave primária das tabelas for só a coluna numemp voce pode fazer assim:
MERGE INTO r034cpl a
USING r030fil b
ON (a.numemp = b.numemp)
WHEN MATCHED THEN
update set a.endrua = b.endfilTem um detalhe, se seu banco não for 10g ou superior voce terá que utilizar tambem o When Not Matched se não voce terá erro de sintaxe.
4 de maio de 2010 às 7:38 pm #93878RGaspar
ParticipanteQuando rodo o comando
MERGE INTO compl_pessoa_fisica a
USING (select b.ds_municipio from sus_municipio b)
ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
WHEN MATCHED THEN
update set a.ds_municipio = b.ds_municipio;Dá a mensagem
“Erro ao iniciar na linha 15 no comando:
MERGE INTO compl_pessoa_fisica a
USING (select b.ds_municipio from sus_municipio b)
ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
WHEN MATCHED THEN
update set a.ds_municipio = b.ds_municipio
Erro na Linha de Comando:16 Coluna:6
Relatório de Erro:
Erro de SQL: ORA-00903: invalid table name
00903. 00000 – “invalid table name”
*Cause:
*Action:”Se alguém tiver uma luz, pq em princípio, está igual aos exemplos acima
4 de maio de 2010 às 7:52 pm #93880Rodrigo Mesquita
ParticipanteColoque um apelido do lado de fora da subquery
(select ds_municipio from sus_municipio) b4 de maio de 2010 às 7:53 pm #93881Miro
Participantee onde posso colocar mais 2 condições
exeplo: where numemp = 2 and numcad = 204[quote=”RodrigoMesquita”:32w2nsw1]Miro,
Se a chave primária das tabelas for só a coluna numemp voce pode fazer assim:
MERGE INTO r034cpl a
USING r030fil b
ON (a.numemp = b.numemp)
WHEN MATCHED THEN
update set a.endrua = b.endfilTem um detalhe, se seu banco não for 10g ou superior voce terá que utilizar tambem o When Not Matched se não voce terá erro de sintaxe.[/quote]
4 de maio de 2010 às 7:58 pm #93883Miro
Participanteele nao reconhesse o b.endfil
[quote=”diegolenhardt”:3f18nuw7]o alias “b’ não deveria estar dentro do parentese?
assim…
[/quote]
MERGE INTO r034cpl a
USING (select b.endfil
from r030fil b)
ON (a.numemp = b.numemp)
WHEN MATCHED THEN
update set a.endrua = b.endfil
where a.numemp = 12
and a.numcad = 204
4 de maio de 2010 às 8:01 pm #93884diegolenhardt
Participantetenta assim:
MERGE INTO r034cpl a
USING (select b.endfil, b.numemp
from r030fil b) x
ON (a.numemp = x.numemp)
WHEN MATCHED THEN
update set a.endrua = x.endfil
where a.numemp = 12
and a.numcad = 204
4 de maio de 2010 às 8:16 pm #93886RGaspar
ParticipanteBah Diego
Não é chamar por qualquer erro, mas as sugestões não funcionaram hehehMERGE INTO compl_pessoa_fisica a
USING (select c.ds_municipio from sus_municipio c) b
ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
WHEN MATCHED THEN
update set a.ds_municipio = b.ds_municipio;O erro é o mesmo:
Erro ao iniciar na linha 9 no comando:
MERGE INTO compl_pessoa_fisica a
USING (select c.ds_municipio from sus_municipio c) b
ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
WHEN MATCHED THEN
update set a.ds_municipio = b.ds_municipio
Erro na Linha de Comando:11 Coluna:26
Relatório de Erro:
Erro de SQL: ORA-00904: “B”.”CD_MUNICIPIO_IBGE”: invalid identifier
00904. 00000 – “%s: invalid identifier”
*Cause:
*Action:4 de maio de 2010 às 10:48 pm #93892diegolenhardt
Participante[quote=”RGaspar”:2p4044yb]Bah Diego
Não é chamar por qualquer erro, mas as sugestões não funcionaram hehehMERGE INTO compl_pessoa_fisica a
USING (select c.ds_municipio from sus_municipio c) b
ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
WHEN MATCHED THEN
update set a.ds_municipio = b.ds_municipio;O erro é o mesmo:
Erro ao iniciar na linha 9 no comando:
MERGE INTO compl_pessoa_fisica a
USING (select c.ds_municipio from sus_municipio c) b
ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
WHEN MATCHED THEN
update set a.ds_municipio = b.ds_municipio
Erro na Linha de Comando:11 Coluna:26
Relatório de Erro:
Erro de SQL: ORA-00904: “B”.”CD_MUNICIPIO_IBGE”: invalid identifier
00904. 00000 – “%s: invalid identifier”
*Cause:
*Action:[/quote]Só ter mais atencao…
veja que o alias b, é para o select (), entao nao existe b.cd_municipio_ibge e simn somente b.ds_municipio, incluui lá o cd_municipioibge dentro do select que voce chama de () b.
MERGE INTO compl_pessoa_fisica a
USING (select C.CD_MUNICIPIO_IBGE, c.ds_municipio from sus_municipio c) b
ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
WHEN MATCHED THEN
5 de maio de 2010 às 12:46 am #93897RGaspar
ParticipanteObrigado Diego
Problema resolvido. Realmente “só” prestar mais atenção.
Rodei aqui e funcionou.MERGE INTO compl_pessoa_fisica a
USING (select C.CD_MUNICIPIO_IBGE, c.ds_municipio from sus_municipio c) b
ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
WHEN MATCHED THEN
update set a.ds_municipio = b.ds_municipio;Obrigado
Atenciosamente
Rafael Gustavo
-
AutorPosts
- Você deve fazer login para responder a este tópico.