|
|
原帖由 rollingpig 于 2008-9-8 16:08 发表 ![]()
加一个for all, 效果会更好
declare
maxrows number default 1000;
row_id_table dbms_sql.Urowid_Table;
currcount_table dbms_sql.number_Table;
cursor cur_t2 is
select /*+ use_hash(T1,T2) parallel(T1,16) parallel_index(IX_T1_id2,16) */
T2.id2, T2.curr_count, T1.rowid row_id
from T1, T2
where T1.id2=T2.id2
order by T1.rowid;
v_counter number;
begin
v_counter := 0;
open cur_t2;
LOOP
EXIT WHEN cur_t2%NOTFOUND;
FETCH cur_t2 bulk collect into row_id_table,currcount_table limit maxrows;
forall i in 1 .. row_id_table.count
update T1 set curr_count=currcount_table(i)
where rowid= row_id_table(i);
commit;
end loop;
end;
/
参考:
http://space.itpub.net/1249/viewspace-64339
请滚珠区确认一下,你这里定义的
row_id_table dbms_sql.Urowid_Table;
currcount_table dbms_sql.number_Table;
是否合适?我看不明白,
我觉得,先定义游标,再用游标定义内存表比较合适? |
|