Pessoal,
Queria agradecer a todos pela ajuda .... valeu mesmo.

Adalberto
  ----- Original Message ----- 
  From: josinei_barbosa 
  To: oracle_br@yahoogrupos.com.br 
  Sent: Thursday, February 16, 2006 7:51 AM
  Subject: [oracle_br] Re: Se o registro existir UPDATE se não INSERT.


  Adalberto,

  Nessa situação, eu abriria um cursor e dentro do loop criaria um bloco
  begin...exception...end . Dentro do begin, executaria o insert e no
  exception, se ocorrer a excessão DUP_VAL_ON_INDEX, executaria o update.
  Para que isso funcione, a tabela precisa ter uma chave primária (ou
  uma unique).

  Algo assim:

  create or replace procedure proc_viagem (vs_datai String, vs_dataf
  String) as
  cursor cs_viagem is
    select viagem.codfil,
           viagem.numero,
           viagem.dtemis,
           viagem.codcav,
           viagem.codcar,
           viagem.codmot,
           viagem.codfro,
           viagem.tpoper,
           viagem.tpviag,
           viagem.qtdnfs,
           viagem.situac
    from logistic.afa037 viagem
    where viagem.dtemis between vs_datai and vs_dataf;
  begin
    for csv in cs_viagem loop
      begin
        insert into VIAGEM(CD_EMPRESA, CD_FILIAL, CD_FILVIA, NR_VIAGEM,
  DT_EMISSAO, CD_FROTA,
                           CD_CARRETA, CD_MOTORISTA, CD_FROTISTA,
  CD_TPOPERACAO, CD_TPVIAGEM,
                           QT_NF, FL_SITUACAO, DT_CADASTRO)
        values(1,1,csv.codfil, csv.numero, csv.dtemis, csv.codcav,
               csv.codcar, csv.codmot, csv.codfro,csv.tpoper, csv.tpviag,
               csv.qtdnfs, csv.situac, sysdate);
      exception
        when dup_val_on_index then
          update VIAGEM
          set CD_EMPRESA    = csv.CD_EMPRESA   
              CD_FILIAL     = csv.CD_FILIAL    
              CD_FILVIA     = csv.CD_FILVIA    
              NR_VIAGEM     = csv.NR_VIAGEM    
              DT_EMISSAO    = csv.DT_EMISSAO   
              CD_FROTA      = csv.CD_FROTA     
              CD_CARRETA    = csv.CD_CARRETA   
              CD_MOTORISTA  = csv.CD_MOTORISTA 
              CD_FROTISTA   = csv.CD_FROTISTA  
              CD_TPOPERACAO = csv.CD_TPOPERACAO
              CD_TPVIAGEM   = csv.CD_TPVIAGEM  
              QT_NF         = csv.QT_NF        
              FL_SITUACAO   = csv.FL_SITUACAO  
              DT_CADASTRO   = csv.DT_CADASTRO  
          where (chave primária) = (valores da chave primária do
  registro do cursor);
        when others then
          rollback;   
      end;
    end loop;
    commit;
  end;
  /


  --- Em oracle_br@yahoogrupos.com.br, "Fernanda Zeca \(IED UFLA\)"
  <[EMAIL PROTECTED]> escreveu
  >
  > Adalberto,
  > 
  > Eu tenho o hábito de dar um select count(*) na tabela para ver se
  existe o 
  > registro, se retornar 1 você dá update, se retornar 0 você dá insert.
  > Não sei se há algum jeito mais pratico.
  > 
  > Fernanda Zeca
  > 
  > ----- Original Message ----- 
  > From: "Adalberto Sousa Monteiro" <[EMAIL PROTECTED]>
  > To: <oracle_br@yahoogrupos.com.br>
  > Sent: Wednesday, February 15, 2006 11:25 AM
  > Subject: [oracle_br] Se o registro existir UPDATE se não INSERT.
  > 
  > 
  > Alguém poderia me dar uma ajudinha .....
  > É o seguinte, tenho a procedure abaixo, porém como faço para
  atualizar os 
  > registros que vierem no SELECT e que ja existe na tabela VIAGEM ??
  > 
  > Gostaria de saber como faço algo do tipo:
  > [          Found VIAGEM ] Update .......
  > [   Not Found VIAGEM ] Insert ........
  > 
  > +- isso .. rs rs, claro que não com os comandos assim, apenas essa
  idéia.
  > Eu precisaria fazer 1° o Select e abrir um cursor e dentro dele
  verificar se 
  > existe o registro na tabela viagem ?
  > Existindo executo um comando de update e não existindo um de insert ?
  > 
  > Ou teria uma forma mais pratica e até mesmo com menos volta ?
  > 
  > Valeu
  > Adalberto.
  > create or replace procedure proc_viagem (vs_datai String, vs_dataf
  String)
  > as
  > begin
  >            insert into VIAGEM ( CD_EMPRESA,
  >                                                CD_FILIAL,
  >                                                CD_FILVIA,
  >                                                NR_VIAGEM,
  >                                                DT_EMISSAO,
  >                                                CD_FROTA,
  >                                                CD_CARRETA,
  >                                                CD_MOTORISTA,
  >                                                CD_FROTISTA,
  >                                                CD_TPOPERACAO,
  >                                                CD_TPVIAGEM,
  >                                                QT_NF,
  >                                                FL_SITUACAO,
  >                                                DT_CADASTRO
  >                                                )
  >                                                (      select 1,
  >                                                                  1,
  >                                                                 
  viagem.codfil,
  >                                                                 
  viagem.numero,
  >                                                                 
  viagem.dtemis,
  >                                                                 
  viagem.codcav,
  >                                                                 
  viagem.codcar,
  >                                                                 
  viagem.codmot,
  >                                                                 
  viagem.codfro,
  >                                                                 
  viagem.tpoper,
  >                                                                 
  viagem.tpviag,
  >                                                                 
  viagem.qtdnfs,
  >                                                                 
  viagem.situac,
  >                                                                  sysdate
  >                                                          from 
  > logistic.afa037 viagem
  >                                                        where
  viagem.dtemis 
  > between vs_datai and vs_dataf
  >                                                );
  >            commit;
  > 
  >            exception
  >            when others then
  >            rollback;
  > end;
  > 
  > 
  > [As partes desta mensagem que não continham texto foram removidas]
  > 
  > 
  > 
  >
  
--------------------------------------------------------------------------------------------------------------------------
  > Atenção! As mensagens deste grupo são de acesso público e de inteira 
  > responsabilidade de seus remetentes.
  > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
  >
  
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________
  > Este Grupo recebe o apoio da SQL Magazine -
  www.devmedia.com.br/sqlmagazine
  > 
  > 
  > Links do Yahoo! Grupos
  > 
  > 
  > 
  > 
  > 
  > 
  > 
  > 
  > 
  > -- 
  > No virus found in this incoming message.
  > Checked by AVG Free Edition.
  > Version: 7.0.375 / Virus Database: 267.15.7/259 - Release Date:
  13/2/2006
  > 
  > 
  > 
  >       
  > 
  >       
  >             
  > _______________________________________________________ 
  > Yahoo! doce lar. Faça do Yahoo! sua homepage. 
  > http://br.yahoo.com/homepageset.html
  >







  
--------------------------------------------------------------------------------------------------------------------------
  Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
  Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
  
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________
  Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine 




        Yahoo! Grupos, um serviço oferecido por: 
              PUBLICIDADE
                
       


------------------------------------------------------------------------------
  Links do Yahoo! Grupos

    a.. Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/
      
    b.. Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]
      
    c.. O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço 
do Yahoo!. 



[As partes desta mensagem que não continham texto foram removidas]



--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________
Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine 

 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a