ITEMNF.CODPEC, ITEMNF.CODPEC, No segundo cursor voce está duplicando os campos acima.
Voce não perguntou, mas mesmo assim... por que está colocando to_char( nf.datalt, 'DD/MM/YYYY') na cláusula WHERE?? Se tiver um índice normal ai, está inutilizado! E outra, está comparando CHAR com DATES? Se campo já é date??? Não entendo!! Outra dica, pelo que vi na sua lógica, não é preciso cursores. Use cursor quando for extritamente necessário, insert de select é o que voce precisa - INFINITAMENTE mais rápido e escalável. On 2/16/06, Adalberto Sousa Monteiro <[EMAIL PROTECTED]> wrote: > > Boa noite pessoal, > Estou criando a procedure abaixo e esta me dando a seguinte mensagem de > erro "Apelido obrigatório na lista de cursor SELECT para evitar nomes > duplicados de coluna" ja tentei achar o que esta errado e não consigo .... > > > > create or replace procedure proc_nfviagem(vs_datai String, vs_dataf > String) > as > cursor cur_nfviagem is > select nf.filvia, > nf.nrviag, > nf.nrfisc, > nf.codrem, > nf.dtnota, > nf.codcon, > nf.coddes, > nf.coddev, > nf.filctr, > nf.nrctrc, > nf.serie, > (nvl(nf.vrnota,0)) vrnota, > nf.situac, > (nvl(nf.pesom3,0)) pesom3, > (nvl(nf.pesobr,0)) pesobr, > (nvl(nf.pesolq,0)) pesolq, > (nvl(nf.qtpeca,0)) qtpeca > from logistic.afa029 nf > where to_char(nf.datalt, 'DD/MM/YYYY') between vs_datai and > vs_dataf; > > cursor cur_itemnfviagem is > select ITEMNF.FILVIA, > ITEMNF.NRVIAG, > ITEMNF.NRFISC, > ITEMNF.CODREM, > ITEMNF.CODPEC, > ITEMNF.CODPEC, > ITEMNF.CODFOR, > ITEMNF.VRUNIT, > ITEMNF.VRTOT, > ITEMNF.QTEMBA, > ITEMNF.PESOLQ, > ITEMNF.PESOBR > FROM logistic.AFA030 ITEMNF, > ( select n.filvia, > n.nrviag, > n.nrfisc, > n.codrem > from logistic.afa029 n > where to_char(n.datalt, 'DD/MM/YYYY') between vs_datai > and vs_dataf > ) notas > where ITEMNF.FILVIA = notas.filvia > and ITEMNF.NRVIAG = notas.nrviag > and ITEMNF.CODREM = notas.codrem > and ITEMNF.NRFISC = notas.nrfisc; > > reg_nfviagem cur_nfviagem%rowtype; > reg_itemnfviagem cur_itemnfviagem%rowtype; > > begin > > > for reg_nfviagem in cur_nfviagem loop > begin > insert into NFVIAGEM ( CD_FILVIA, > NR_VIAGEM, > NR_NF, > CD_REMETENTE, > DT_NF, > CD_CONSIGNATARIO, > CD_DESTINATARIO, > CD_DEVEDOR, > CD_FILCTRC, > NR_CTRC, > NR_SERIECTRC, > VR_NF, > FL_SITUACAO, > QT_PESOM3, > QT_PESOBRT, > QT_PESOLIQ, > QT_EMBALAGEM > ) > values ( reg_nfviagem.filvia, > reg_nfviagem.nrviag, > reg_nfviagem.nrfisc, > reg_nfviagem.codrem, > reg_nfviagem.dtnota, > reg_nfviagem.codcon, > reg_nfviagem.coddes, > reg_nfviagem.coddev, > reg_nfviagem.filctr, > reg_nfviagem.nrctrc, > reg_nfviagem.serie, > reg_nfviagem.vrnota, > reg_nfviagem.situac, > reg_nfviagem.pesom3, > reg_nfviagem.pesobr, > reg_nfviagem.pesolq, > reg_nfviagem.qtpeca > ); > exception > when dup_val_on_index then > update NFVIAGEM > set FL_SITUACAO = reg_nfviagem.situac, > DT_ALTERACAO = sysdate > where CD_EMPRESA = 1 > and CD_FILIAL = 1 > and CD_FILVIA = reg_nfviagem.filvia > and NR_VIAGEM = reg_nfviagem.nrviag > and NR_NF = reg_nfviagem.nrfisc > and CD_REMETENTE = reg_nfviagem.codrem; > > when others then > rollback; > end; > end loop; > > commit; > > for reg_itemnfviagem in cur_itemnfviagem loop > begin > insert into ITEMNFVIAGEM ( CD_FILVIA, > NR_VIAGEM, > NR_NF, > CD_REMETENTE, > CD_PRODUTO, > DS_PRODUTO, > CD_FORNECEDOR, > VR_UNITARIO, > VR_TOTAL, > QT_EMBALAGEM, > QT_PESOBRT, > QT_PESOLIQ > ) > values ( reg_itemnfviagem.FILVIA, > reg_itemnfviagem.NRVIAG, > reg_itemnfviagem.NRFISC, > reg_itemnfviagem.CODREM, > reg_itemnfviagem.CODPEC, > reg_itemnfviagem.CODPEC, > reg_itemnfviagem.CODFOR, > reg_itemnfviagem.VRUNIT, > reg_itemnfviagem.VRTOT, > reg_itemnfviagem.QTEMBA, > reg_itemnfviagem.PESOLQ, > reg_itemnfviagem.PESOBR > ); > exception > when dup_val_on_index then > update ITEMNFVIAGEM > set DT_ALTERACAO = sysdate > where CD_EMPRESA = 1 > and CD_FILIAL = 1 > and CD_FILVIA = reg_itemnfviagem.filvia > and NR_VIAGEM = reg_itemnfviagem.nrviag > and NR_NF = reg_itemnfviagem.nrfisc > and CD_REMETENTE = reg_itemnfviagem.codrem > and CD_PRODUTO = reg_itemnfviagem.CODPEC; > > when others then > rollback; > end; > > end loop; > > commit; > > Close cur_nfviagem; > Close cur_itemnfviagem; > > 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 > > > > > > > > -- Marcio Portes Material Tecnico em Portugues - http://mportes.blogspot.com Practical Learning Oracle - http://mportes.blogspot.com/2006/02/practical-learning-oracle.html [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