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]

Responder a