Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lwazevedo

Auxilio código PL/SQL

Recommended Posts

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.