这是出去面试碰到的,该表要修改的字段已经建立了索引,
直接update的话时间会非常久(update table1 set col='0')
我给出的方案是用存储过程一条条的更新.面试的人似乎不大满意
不知道大家有什么好的解决方法?
------解决方案--------------------
bulk collect+forall+rowid更新
------解决方案--------------------
比如emp的 sal创建了索引,差不多就是下面这种代码:
declare
v_maxrows number default 1000;
v_rowid dbms_sql.Urowid_Table;
cursor cur is
select rowid from emp t1 where t1.sal = 810 order by T1.rowid;
v_counter number;
begin
v_counter := 0;
open cur;
LOOP
EXIT WHEN cur%NOTFOUND;
FETCH cur bulk collect
into v_rowid limit v_maxrows;
forall i in 1 .. v_rowid.count
update emp set sal = sal + 10 where rowid = v_rowid(i);
commit;
end loop;
end;
/