Update em 2 Tabelas no Oracle (PLSQL)

Oracle PL SQL

28/04/2022

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
Wesley Ribeiro

Wesley Ribeiro

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

28/04/2022

no SQL Server funciona assim:
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

Emerson Nascimento

28/04/2022

no Oracle acho que é assim:
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')
   )
a questão a respeito da função pls_obter_dados_segurado() se aplica a esta instrução também.

GOSTEI 0
Wesley Ribeiro

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
GOSTEI 0
POSTAR