分段表rowid 利用ROWID 快速更新單錶記錄

2021-10-13 08:29:19 字數 974 閱讀 6720

-----對於普通表

實現: update t_pm_deposit_his b

set flag = substr( flag, 1, 8 )||'4'||

case

when term <= 365

then '1'

else '2'

end as flag

where b.data_date>=20130101

declare

cursor cur is

select

b.rowid row_id

from t_pm_deposit_his b

where b.data_date>=20130101

order by b.rowid; ---如果表的資料量不是很大,可以不用 order by rowid

v_counter number;

begin

v_counter := 0;

for row in cur loop

update t_pm_deposit_his b

set flag = substr( flag, 1, 8 )||'4'||

case

when term <= 365

then '1'

else '2'

end as flag

where b.data_date>=20130101 and rowid = row.row_id;

v_counter := v_counter + 1;

if (v_counter >= 10000) then

commit;

v_counter := 0;

end if;

end loop;

commit;

end;---對於分割槽表

可以根據分割槽鍵,拆成多個,進行併發更新。---測試更新94g的分割槽表,花了6個小時的樣子悲劇。。。。。。。。。。。

分段表rowid 通過rowid分批更新資料

環境 os red hat linux as 5 db 10.2.0.4 通常情況下我們更新資料量比較大的表的時候,通常會使用oracle中bulk collect做批量更新,但我們按照表資料行的rowid,按照rowid將表資料分成幾批,然後通過rowid更新表的資料.1.建立表 create t...

利用 rowid 提公升update效能

能不能想辦法 提公升一下如下update語句的效能 update opt acct fdim a set acct skid select acct skid from opt acct fdim bkp b where a.acct id b.acct id select count from o...

對錶進行ROWID切片

前言 對於乙個很大的分割槽表驚喜update,delete,想要加快執行速度,可以按照分割槽,在不同的會話中對每個分割槽表單獨進行update,delete。但是對乙個很大的非分割槽表進行update,delete,如果只在乙個會話裡執行sql,很容易引起undo不夠,如果會話連線中斷,會導致大量資...