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