Obrigado pessoal pelas dicas... Gostaria de comentar algumas sugestões que talvez esclareçam melhor a pergunta que eu fiz:
- SIM, o select (que denomina o cursor) retorna dados; - Eu já realizei o comando UPDATE direto, sem a utilização do cursor... e vi que realmente ele dava certo.. Quis utilizar o cursor mais para fins didáticos (treinamento mesmo); - A ausência do WHERE se dá pelo fato de que todas as linhas da tabela deverão ser atualizadas. A coluna DT_FINAL foi inserida na tabela após a sua criação e população. Esse comando eu estou fazendo apenas para fazer um UPDATE geral utilizando para isso um cursor, com comando FOR UPDATE (na declaração do cursor) e, posteriormente, a instrução WHERE CURRENT OF para q o valor a ser aplicado NÃO SEJA somente o do último ponteiro. - Repassei a instrução de FETCH para dentro do laço de LOOP e a proc recompilou normalmente... O problema é que, na hora de rodar, ele informa erro e indica q o cursor já está aberto... Como devo proceder nesses casos? O meu editor é o PL/SQL developer v 5. Grato! Matheus Malta 2009/10/14 Evandro Giachetto <evandrogiache...@gmail.com> > > > E, achei desnecessário comentar alguns possíveis erros em seu código, como > a > falta de where na instrução update pois os colegas já os comentaram acima. > > De uma boa revisada na proc para ver se esses erros correspondem. > > Atenciosamente. > > > Evandro Giachetto > Oracle Certified Associate > evan...@clickinterativa.com.br <evandro%40clickinterativa.com.br> > > 2009/10/14 Evandro Giachetto > <evandrogiache...@gmail.com<evandrogiachetto%40gmail.com> > > > > > > Você colocou o Fetch antes da instrução LOOP. > > > > Dessa forma, a variável v_dtf recebe apenas o primeiro registro do > cursor. > > > > Tente colocar o fetch dentro de seu laço loop. > > > > Att. > > Evandro Giachetto > > Oracle Certified Associate > > evan...@clickinterativa.com.br <evandro%40clickinterativa.com.br> > > > > > > 2009/10/14 Matheus Malta de Aguiar > > <maltamath...@gmail.com<maltamatheus%40gmail.com> > > > > > > > >> > >> Galera... > >> > >> Estou tentando desenvolver uma proc que tem por objetivo atualizar uma > >> coluna nova que acaba de ser acrescida na tabela, ou seja, ela (a > coluna) > >> econtra-se sem registros. > >> > >> No entanto, quando do emprego do cursor (em tempo de execução) eu > percebo > >> que a proc está atualizando somente a primeira linha da tabela (ou seja, > >> somente uma única célula). > >> > >> Estou encaminhando a proc... > >> > >> Quem puder ajudar, ficarei grato! > >> > >> Valew pessoal! > >> > >> Matheus Malta > >> "O certo é certo mesmo q ninguém o faça.. e o errado é errado mesmo q > todo > >> mundo faça... Procure fazer o certo para não explicar porque resolveu > >> fazer > >> errado.. " > >> > >> *PROC* > >> > >> create or replace procedure aux.prc_teste_matheus > >> (v_erro out varchar2) > >> > >> is > >> --/*==================================*/ > >> --|| PROC DE TESTE || > >> --||----------------------------------|| > >> --|| AUTOR: Matheus || > >> --|| MOTIVO: Treino || > >> --|| TABELA: aux.teste_matheus || > >> --/*==================================*/ > >> > >> v_rqr number; > >> v_dtf date; > >> > >> --Criando o cursor para atualização da tabela > >> cursor mma_update is > >> select (date_key - rt_qtde_retorno) dt_final > >> from aux.teste_matheus > >> for update; > >> > >> begin > >> > >> --Abrindo o cursor > >> open mma_update; > >> > >> --Obtendo os dados do cursor > >> fetch mma_update into v_dtf; > >> while mma_update%isopen loop > >> --Atualizando a Tabela a partir dos valores obtidos > >> update aux.teste_matheus > >> set dt_final = v_dtf; > >> > >> --sair quando não houver informações > >> exit loop when mma_update%notfound; > >> > >> --end loop; > >> > >> --Fechando cursor > >> close mma_update; > >> --Salvando as informações > >> commit; > >> > >> -- Tratando os erros > >> EXCEPTION > >> > >> WHEN NO_DATA_FOUND then > >> v_erro := 'Parâmetro não encontrado!'; > >> dbms_output.put_line(v_erro); > >> > >> WHEN OTHERS THEN > >> v_erro := 'Procedimento não executado - Erro: '||SQLERRM; > >> dbms_output.put_line(v_erro); > >> end; > >> > >> [As partes desta mensagem que não continham texto foram removidas] > >> > >> > >> > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > [As partes desta mensagem que não continham texto foram removidas]