Senhores,
Gostaria de uma ajuda.
#update no campo com valor de outra tabela
SELECT CD_MUNICIPIO_IBGE FROM pessoa_fisica WHERE CD_MUNICIPIO_IBGE is null
SELECT CD_MUNICIPIO_IBGE FROM compl_pessoa_fisica
UPDATE pessoa_fisica SET CD_MUNICIPIO_IBGE = CD_MUNICIPIO_IBGE
Preciso que na tabela pessoa_fisica o codigo CD_MUNICIPIO_IBGE seja igual ao código CD_MUNICIPIO_IBGE da tabela compl_pessoa_fisica
Não sou nenhum ninja em SQL, mas acho que algo assim funciona:
UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
SELECT cpf.cd_municipio_ibge
FROM compl_pessoa_fisica cpf
WHERE cpf.cod_pessoa_fisica = :cod
)
WHERE pf.cod = :cod
Repare que as condições dos WHERE's
são a mesma.
Bom dia!
Obrigado, mas não está dando certo.
UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
SELECT cpf.cd_municipio_ibge
FROM compl_pessoa_fisica cpf
WHERE cpf.cd_pessoa_fisica = pf.cd_municipio_ibge AND cpf.ie_tipo_complemento = 1
)
WHERE cpf.cd_pessoa_fisica = pf.cd_pessoa_fisica
Na verdade eu não tenho um código, apenas vou copiar o cd_municipio_ibge de uma tabela para outra, são códigos iguais.
Essa parte não pode ser assim. Tenta assim:
UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
SELECT cpf.cd_municipio_ibge
FROM compl_pessoa_fisica cpf
WHERE cpf.cd_pessoa_fisica = pf.cd_municipio_ibge
)
WHERE pf.cd_pessoa_fisica = :codPessoaFisica
Eu tinha errado mesmo, ajustei no texto acima.
Seu script ele pede para eu informar o código (:codPessoaFisica), porém eu vou copiar na verdade, são mais de 10000 mil códigos, então apenas quero copiar de um e colar no outro.
UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
SELECT cpf.cd_municipio_ibge
FROM compl_pessoa_fisica cpf
WHERE cpf.cd_pessoa_fisica = pf.cd_municipio_ibge
)
WHERE pf.cd_pessoa_fisica = cpf.cd_pessoa_fisica
Erro a partir da linha : 3 no comando -
UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
SELECT cpf.cd_municipio_ibge
FROM compl_pessoa_fisica cpf
WHERE cpf.cd_pessoa_fisica = pf.cd_municipio_ibge
)
WHERE pf.cd_pessoa_fisica = cpf.cd_pessoa_fisica
Erro na Linha de Comandos : 9 Coluna : 29
Relatório de erros -
Erro de SQL: ORA-00904: “CPF”.“CD_PESSOA_FISICA”: identificador inválido
00904. 00000 - “%s: invalid identifier”
*Cause:
*Action:
Cara, na verdade eu estava moscando. No seu caso, tem como fazer um UPDATE FROM SELECT:
UPDATE
pessoa_fisica pf
SET
pf.cd_municipio_ibge = cpf.cd_municipio_ibge
FROM
compl_pessoa_fisica cpf
WHERE
pf.cd_pessoa_fisica = cpf.cd_pessoa_fisica
EDIT
Dei uma pesquisada e parece que o oracle não entende essa sintaxe. Vc pode tentar assim:
UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
SELECT cpf.cd_municipio_ibge
FROM compl_pessoa_fisica cpf
WHERE pf.cd_pessoa_fisica = cpf.cd_pessoa_fisica AND cpf.ie_tipo_complemento = 1
);
Consegui 
UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
SELECT cpf.cd_municipio_ibge
FROM compl_pessoa_fisica cpf
WHERE pf.cd_pessoa_fisica = cpf.cd_pessoa_fisica AND ie_tipo_complemento = 1
)
WHERE pf.cd_pessoa_fisica = 28027
AND
pf.CD_MUNICIPIO_IBGE is null
Coloquei apenas um paciente como exemplo,
)
WHERE pf.cd_pessoa_fisica = cd_pessoa_fisica
AND
pf.CD_MUNICIPIO_IBGE is null
1 curtida
Antes da sua resposta, eu tinha editado minha resposta com uma forma que executa para todos os registros. Veja se funciona.
Cara,
Da forma que mandou ajudou bastante, só fiz algumas alteraçòes e funcionou perfeitamente.
UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
SELECT cpf.cd_municipio_ibge
FROM compl_pessoa_fisica cpf
WHERE pf.cd_pessoa_fisica = cpf.cd_pessoa_fisica AND ie_tipo_complemento = 1
)
WHERE pf.cd_pessoa_fisica = cd_pessoa_fisica
AND pf.CD_MUNICIPIO_IBGE is null
1 curtida