Marcos,
Valeu pela explicação .... mas tenho uma dúvida.
Pode parecer piada, mas é uma dúvida mesmo ..... iniciante ...

Farei assim então ?

cursor cur_viagem is
       select viagem.codfil,
              viagem.numero,
              viagem.dtemis,
         from logistic.afa037 viagem
        where viagem.dtemis between vs_datai and vs_dataf;

reg_viagem  cur_viagem%rowtype;

Open cur_viagem;
  
  Loop
      fetch cur_viagem
      into  reg_viagem;
      exit when cur_viagemf%notfound;

      update viagem VIAGEM set dt_emissao = reg_viagem.dtemis
                         where cd_filial = reg_viagem.codfil
                           and nr_viagem = reg_viagem.numero;

      if  sql%notfound then
          insert into viagem (cd_filial, nr_viagem, dt_emissao)
                       values( reg_viagem.codfil, reg_viagem.numero, 
reg_viagem.dtemis);
      end if;

  End Loop;
  
  commit;

Close cur_viagem;

----- Original Message ----- 
  From: Marcos Soares 
  To: oracle_br@yahoogrupos.com.br 
  Sent: Wednesday, February 15, 2006 2:30 PM
  Subject: Re: [oracle_br] Se o registro existir UPDATE se não INSERT.


  Adalberto,

  Faz uma coisa assim:

  BEGIN
      UPDATE tabela
      SET campo1 = valor1, campo2 = valor2, campoN = valorN
      WHERE ....;
  IF SQL%NOTFOUND THEN
     INSERT INTO tabela (campo1, campo2, campoN)
     values( valor1, valor2, valorN);
  END IF;

  END;

  Uma instrução UPDATE não retorna erro quando nenhuma linha é atualizada. 
Diferente de SELECT que retorna a exceção NO_DATA_FOUND. No entanto, como toda 
instrução SQL (inclusive UPDATE) abre um cursor implicitamente, vc pode usar 
SQL%NOTFOUND para verficar se alguma linha foi atualizada.


    ----- Original Message ----- 
    From: Anderson Haertel Rodrigues 
    To: oracle_br@yahoogrupos.com.br 
    Sent: Wednesday, February 15, 2006 11:47 AM
    Subject: Re: [oracle_br] Se o registro existir UPDATE se não INSERT.


    Adalberto,

    Leia sobre a Instrução MERGE.

    Sucesso,

    Anderson Haertel Rodrigues
    Database Administrator - DBA
    Florianópolis/SC/Brasil

    --- Adalberto Sousa Monteiro <[EMAIL PROTECTED]>
    escreveu:

    > 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;

    Anderson Haertel Rodrigues
    Administrador de Banco de Dados - DBA
    Florianópolis/SC


          



          
                
    _______________________________________________________ 
    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!. 




  ------------------------------------------------------------------------------


    No virus found in this incoming message.
    Checked by AVG Free Edition.
    Version: 7.1.375 / Virus Database: 267.15.7/259 - Release Date: 13/2/2006


  [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 




        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