Update com n registros utilizando loop FOR

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
cristhianlor
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Qui, 04 Mar 2010 12:24 am
Localização: SP

Selecionar tudo

set serveroutput on

DECLARE

cursor cur_upd_marca is 
select *,rowid 
from marca;

BEGIN

for x in cur_upd_marca loop
 x.cod_marca := ;
 x.des_marca := 'Marca';
 update marca
 set des_marca = x.des_marca
 where rowid = x.rowid;
 if mod(cur_upd_marca%rowcount,5) = 0 then
 commit;
 end if;
end loop;
commit;
END;
Estou tentando realizar um update na tabela, onde será necessário atualizar 10 registros de uma só vez e, fazendo commit de 5 em 5 registros, porém não estou conseguindo atribuir estes valores de 1 a 10 na variável x.cod_marca. Alguma ideia de como implementar isso seguindo o código acima?
cristhianlor
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Qui, 04 Mar 2010 12:24 am
Localização: SP

cristhianlor escreveu:

Selecionar tudo

set serveroutput on

DECLARE

cursor cur_upd_marca is 
select *,rowid 
from marca;

BEGIN

for x in cur_upd_marca loop
 x.cod_marca := ;
 x.des_marca := 'Marca';
 update marca
 set des_marca = x.des_marca
 where rowid = x.rowid;
 if mod(cur_upd_marca%rowcount,5) = 0 then
 commit;
 end if;
end loop;
commit;
END;
Estou tentando realizar um update na tabela, onde será necessário atualizar 10 registros de uma só vez e, fazendo commit de 5 em 5 registros, porém não estou conseguindo atribuir estes valores de 1 a 10 na variável x.cod_marca. Alguma ideia de como implementar isso seguindo o código acima?
Oracle 11g
Win 10 Home
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Em vez de ROWCOUNT, você tem que usar ROWNUM.
Mas tem que colocar ele no SELECT, como se fosse um campo normal da tabela:

Selecionar tudo

select m.*, rownum NUM, r.rowid from marca m;
Outra forma é usar um contador numa variável.

Selecionar tudo

DECLARE
  cursor cur_upd_marca is
    select *, rowid from marca;

  vcontador number:=0;
BEGIN
  for x in cur_upd_marca loop
    x.des_marca := 'Marca';
    vcontador   := vcontador+1;
  
    update marca 
    set des_marca = x.des_marca 
    where rowid = x.rowid;
  
    if mod( vcontador, 5) = 0 then
      commit;
    end if;
  
  end loop;
  commit;
END;
cristhianlor
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Qui, 04 Mar 2010 12:24 am
Localização: SP

Dr. Gori, muito obrigado! Vou fazer o teste e retorno com o resultado.
Responder
  • Informação