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;