declare
     type t_rowid is table of varchar2(18) index by pls_integer;
     type t_new_value is table of v_upd_table.new_value%type index by pls_integer;

     l_t_rowid t_rowid;
     l_t_new_value t_new_value;

     cursor c_upd is 
       select * from v_upd_table;
   
     fetch_limit constant number := 10000;
  
begin
   open c_upd;
  
   loop
     fetch c_upd bulk collect 
        into l_t_rowid, l_t_new_value 
        limit fetch_limit ;

     pkg_common_logging.fetched(c_upd%ROWCOUNT);

   if c_upd%ROWCOUNT > 0 THEN
        forall i in l_t_rowid.first .. l_t_rowid.last
  
      update table_target set
         old_value = l_t_new_value(i)
         WHERE ROWID = CHARTOROWID (l_t_rowid(i));

      commit;

    end if;
   exit when l_t_rowid.count() < fetch_limit;
  
   end loop;
   close c_upd;
 
exception
  when others then
    pkg_common_logging.failed;
    close c_upd;
    raise;

end;