Preciso pegar alguns dados da Tabela A, usar alguma lógica e inserir uma ou mais linhas na Tabela B. Tenho um bloco PLSQL que traz dados da Tabela A com um cursor, executa toda a lógica necessária e insere o linhas necessárias.
O problema é que existem linhas duplicadas na Tabela B - é a natureza da besta. Mas preciso que o resultado final seja uma Tabela B sem duplicatas.
É o Oracle, portanto, as tabelas temporárias são incorretas - qual é a melhor maneira de fazer isso?
Se as duplicatas estão sendo introduzidas pelas inserções da Tabela A, parece que uma MERGE seria adequada. A
MERGE
podeINSERT
dados quando o registro não existe na Tabela B eUPDATE
dados se o registro já existe, evitando assim a introdução de duplicatas.FrustratedWithFormsDesign está correto ao dizer que você provavelmente deve ter uma restrição impedindo a introdução de duplicatas. Ele também está correto ao apontar que esse código provavelmente se beneficiaria do processamento em massa.
Phil está correto ao dizer que, se você precisar apenas inserir dados, seria preferível uma subconsulta removendo as linhas da inserção.