HI,
Passei a vida toda apenas utilizando o select/insert para popular uma tabela a partir do resultado de uma consulta. Mas ontem precisei além de inserir, também atualizar. Não queria executar a query duas vezes para fazer isso, um select/insert para inserir e um loop em outra query para atualizar.
Sabia que no MySql tem esse recurso de inserir se não existir, e se existir, atualizar. Então fui perguntar ao Google como fazer isso no Oracle. Descobri que existe o comando MERGE, que serviria para o meu propósito.
Comando MERGE
http://psoug.org/reference/merge.html
Agora vou relatar os problema que enfrentei para conseguir executá-lo.
Eu modifiquei a procedure e passou a ocorrer esse erro: ORA-00918: column ambiguously.
Passei um bom tempo para achar esse erro, já que analisando a query não via nenhum problema aparente já que todos os campos estavam precedidos por aliases. Ex:. a.id = b.id.
Pesquisando no google vi que o problema era a repetição de um campo na select. É que antes no select/insert, existiam dois campos que recebiam o mesmo valor: Insert into teste(id, viagens1, viagens2) select id, viagens, viagens from teste2.
Foi aqui que achei a solução para o problema ORA-00918: column ambiguously no MERGE
https://forums.oracle.com/forums/thread.jspa?messageID=10327846
Outro problema que enfrentei foi esse: ORA-30926: unable to get a stable set of rows in the source tables.
No teste para identificar se o registro existe ou não, coloquei apenas 1 campo e minha chave primaria possui 3 campos.
Achei a solução aqui
http://stackoverflow.com/questions/2337271/ora-30926-unable-to-get-a-stable-set-of-rows-in-the-source-tables
Um outro erro que acontece é se colocar um campo da chave primaria no update para ser atualizado.
Fiquem na Paz!!!
Nenhum comentário:
Postar um comentário