Update em 2 Tabelas no Oracle (PLSQL)
Fala galera,
estou com uma dúvida sobre fazer um UPDATE entre 2 tabelas no Oracle
UPDATE pls_Segurado
INNER JOIN PLS_SIB_CONFERENCIA ON pls_obter_dados_segurado(pls_Segurado.nr_sequencia,''''N'''') = PLS_SIB_CONFERENCIA.nm_beneficiario
INNER JOIN PLS_SIB_CONFERENCIA ON pls_obter_dados_segurado(pls_Segurado.nr_sequencia,''''NAS'''') = PLS_SIB_CONFERENCIA.dt_nascimento
SET pls_Segurado.cd_cco = PLS_SIB_CONFERENCIA.nr_cco
Eu preciso pegar os dados de 1 campo de 1 tabela e jogar nessa outra tabela, mas o oracle me devolve erro..
Alguém consegue me ajudar?
Estou utilizando o PLSQL no Oracle
estou com uma dúvida sobre fazer um UPDATE entre 2 tabelas no Oracle
UPDATE pls_Segurado
INNER JOIN PLS_SIB_CONFERENCIA ON pls_obter_dados_segurado(pls_Segurado.nr_sequencia,''''N'''') = PLS_SIB_CONFERENCIA.nm_beneficiario
INNER JOIN PLS_SIB_CONFERENCIA ON pls_obter_dados_segurado(pls_Segurado.nr_sequencia,''''NAS'''') = PLS_SIB_CONFERENCIA.dt_nascimento
SET pls_Segurado.cd_cco = PLS_SIB_CONFERENCIA.nr_cco
Eu preciso pegar os dados de 1 campo de 1 tabela e jogar nessa outra tabela, mas o oracle me devolve erro..
Alguém consegue me ajudar?
Estou utilizando o PLSQL no Oracle
Wesley Ribeiro
Curtidas 0
Respostas
Emerson Nascimento
28/04/2022
no SQL Server funciona assim:
acredito que pls_obter_dados_segurado seja uma função, certo?
você precisa mesmo usar essa função aqui? porque se os dados vierem da tabela pls_Segurado você já estará posicionado no registro correto, e o uso da função será uma redundância.
se for assim, talvez a instrução abaixo seja mais performática:
UPDATE ps SET ps.cd_cco = pc.nr_cco FROM pls_Segurado ps INNER JOIN PLS_SIB_CONFERENCIA pc ON pls_obter_dados_segurado(ps.nr_sequencia,'N') = pc.nm_beneficiario AND pls_obter_dados_segurado(ps.nr_sequencia,'NAS') = pc.dt_nascimento
acredito que pls_obter_dados_segurado seja uma função, certo?
você precisa mesmo usar essa função aqui? porque se os dados vierem da tabela pls_Segurado você já estará posicionado no registro correto, e o uso da função será uma redundância.
se for assim, talvez a instrução abaixo seja mais performática:
UPDATE ps SET ps.cd_cco = pc.nr_cco FROM pls_Segurado ps INNER JOIN PLS_SIB_CONFERENCIA pc ON ps.nm_beneficiario = pc.nm_beneficiario AND ps.dt_nascimento = pc.dt_nascimento
GOSTEI 0
Emerson Nascimento
28/04/2022
no Oracle acho que é assim:
a questão a respeito da função pls_obter_dados_segurado() se aplica a esta instrução também.
UPDATE pls_Segurado ps SET ps.cd_cco = ( SELECT pc.nr_cco FROM PLS_SIB_CONFERENCIA pc WHERE pc.nm_beneficiario = pls_obter_dados_segurado(ps.nr_sequencia,'N') AND pc.dt_nascimento = pls_obter_dados_segurado(ps.nr_sequencia,'NAS') )
GOSTEI 0
Wesley Ribeiro
28/04/2022
UPDATE pls_Segurado ps SET ps.cd_cco =
(
SELECT pc.nr_cco
FROM PLS_SIB_CONFERENCIA pc
WHERE pc.nm_beneficiario = pls_obter_dados_segurado(ps.nr_sequencia,'N')
AND pc.dt_nascimento = pls_obter_dados_segurado(ps.nr_sequencia,'NAS')
)
Eu removi a função e coloquei 3 tabelas no subselect, porém ele me retorna:
'a subconsulta de uma unica linha retorna mais de uma linha'
Código novo:
UPDATE pls_Segurado A
SET A.cd_cco =
(select distinct b.nr_cco
from pls_sib_conferencia b, pessoa_fisica c
where b.nm_beneficiario = c.nm_pessoa_fisica
and c.cd_pessoa_fisica = a.cd_pessoa_fisica
and b.dt_nascimento = c.dt_nascimento
)
where a.cd_cco is null
(
SELECT pc.nr_cco
FROM PLS_SIB_CONFERENCIA pc
WHERE pc.nm_beneficiario = pls_obter_dados_segurado(ps.nr_sequencia,'N')
AND pc.dt_nascimento = pls_obter_dados_segurado(ps.nr_sequencia,'NAS')
)
Eu removi a função e coloquei 3 tabelas no subselect, porém ele me retorna:
'a subconsulta de uma unica linha retorna mais de uma linha'
Código novo:
UPDATE pls_Segurado A
SET A.cd_cco =
(select distinct b.nr_cco
from pls_sib_conferencia b, pessoa_fisica c
where b.nm_beneficiario = c.nm_pessoa_fisica
and c.cd_pessoa_fisica = a.cd_pessoa_fisica
and b.dt_nascimento = c.dt_nascimento
)
where a.cd_cco is null
GOSTEI 0