-----對於普通表
實現: 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不夠,如果會話連線中斷,會導致大量資...