这是出去面试碰到的,该表要修改的字段已经建立了索引,
直接update的话时间会非常久(update table1 set col='0')
我给出的方案是用存储过程一条条的更新.面试的人似乎不大满意
不知道大家有什么好的解决方法?
直接update的话时间会非常久(update table1 set col='0')
我给出的方案是用存储过程一条条的更新.面试的人似乎不大满意
不知道大家有什么好的解决方法?
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;
/
如果是要在一个事务里面完成,更改要同时生效, 这样的做的和直接update, 效率上会高多少?
直接update: update emp set sal = sal + 10 where where t1.sal = 810