lwazevedo 0 Denunciar post Postado Abril 1, 2015 Bom dia Pessoal. Estou precisando de um auxilio em PLSQL. O que eu quero fazer é o seguinte. Tenho um external table ext_dados quero pegar os dados desta tabela e atualizar os dados existentes e inserir quando não existir, isso com algumas validações. Minha ideia é o seguinte: Declare Cursor Cur_ext_dados Is Select * From ext_dados; Begin For C1 in Cur_ext_dados Loop exit when Cur_ext_dados%notfound; insert into comp_dados (c1.nome, c1.email, c1.dataAC, C1.id, sysdate, 1) where not exists (select id from comp_dados where comp_dados.id = C1.id); update comp_dados set dataAC = C1.dataAC where exists (select id, dataAC from com_dados where comp_dados.id = C1.id and comp_dados.dataAC < C1.dataAC); update comp_dados set qtdH = (qtdH + 1) where exists (select id from comp_dados where comp_dados.id = C1.id); update comp_dados set dtAtu = sysdate where exists (select id from comp_dados where comp_dados.id = C1.id); End Loop; End; Estou com dúvidas no procedimento de inserir e atualizar, não sei se estão correto, mas a ideia é que se o registro não existir na tabela comp_dados devo inserir os dados. Agora se o registro existir quero atualizar alguns campos da seguinte forma. dataAC se a data do cursor for > que a data da tabela comp_dados quero atualizar o campo da tabela com o dado do cursor. quero atualizar o campo da tabela qtdh com a soma dele + 1 se existir o registro. queto atualizar o campo da tabela dtAtu com a data do dia. Se alguém poder ajudar agradeço. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Abril 1, 2015 você pode fazer um SELECT antes do INSERT e verificar se existe ou Fazer o INSERT em um bloco protegido e se houver duplicates fazer o INSERT algo assim ... BEGIN insert into comp_dados (c1.nome, c1.email, c1.dataAC, C1.id, sysdate, 1) ; EXCEPTION WHEN DUPLICATES THEN UPDATE .... WHEN OTHERS THEN RAISE; END; Compartilhar este post Link para o post Compartilhar em outros sites
lwazevedo 0 Denunciar post Postado Abril 1, 2015 Certo Motta. Então o Duplicates indica que já existe um registro. Poderia me dizer como posso fazer com o select antes para verificar a existência e se não houver fazer o insert.... A questão dos Updates estão de uma forma coerente ou poderia ser melhorado ? Dava fazendo uma pesquisa na net sobre o assunto e achei um tal de merge, montei um codigo de exemplo. gostaria de saber se desta forma seria melhor. MERGE comp_dados C USING ext_dados E ON E.id = C.id when not MATCHED then insert (nome,email,dataAC,QtdH) values (E.nome,E.email,getDate(),1) when MATCHED then update set dataAC = E.dataAC where C.dataAC < E.dataAC update set QtdH = (C.QtdH + 1) dataATU = getDate(); Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Abril 1, 2015 Nunca usei este MERGE. Compartilhar este post Link para o post Compartilhar em outros sites
lwazevedo 0 Denunciar post Postado Abril 1, 2015 Blz. Compartilhar este post Link para o post Compartilhar em outros sites