Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Erro de instrução Oracle MERGE (ORA-30926)


A primeira (e mais óbvia) resposta é limpar os dados para que você não tenha duplicatas. Parece provável que os dados de amostra que você forneceu sejam o resultado de um bug.

Quanto ao merge declaração, se os dados são realmente duplicados, você pode usar apenas distinct :
MERGE INTO maintable pr
USING      (SELECT DISTINCT contract,
                            membertype,
                            address1,
                            city,
                            state,
                            zipcode,
                            countrycode
            FROM   incrementaltable pra
            WHERE  pra.membertype = 'Parent')
ON         (pr.contract = pra.contract)
WHEN MATCHED THEN
   UPDATE SET pr.address1 = pra.address1,
              pr.city = pra.city,
              pr.state = pra.sate,
              pr.zipcode = pra.zipcode,
              pr.countrycode = pra.countrycode
      WHERE      address1 IS NULL AND pr.membertype <> 'Parent'