你可以寫一個存儲過程來執(zhí)行,由于數(shù)據(jù)量大,如果直接更新,數(shù)據(jù)庫UNDO表空間肯定會滿,會產(chǎn)生異常。
創(chuàng)新互聯(lián)公司專注于北京企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城系統(tǒng)網(wǎng)站開發(fā)。北京網(wǎng)站建設(shè)公司,為北京等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
過程如下,給你參考下。
CREATE OR REPLACE PROCEDURE UPDATE_TABLES
AS
TYPE T_MW IS TABLE OF ROWID;
T_T_MW T_MW;
CURSOR V_CUR IS
SELECT ROWID FROM T ;
BEGIN
OPEN V_CUR;
LOOP
FETCH V_CUR BULK COLLECT
INTO T_T_MW LIMIT 80000;
FOR C1 IN 1 .. T_T_MW.COUNT LOOP
UPDATE T NOLOGGING
SET 要改的列
WHERE ROWID=T_T_MW(C1);
END LOOP;
COMMIT;
EXIT WHEN V_CUR%NOTFOUND;
END LOOP;
CLOSE V_CUR;
COMMIT;
END;
該過程可一次提交80000行。你也可以根據(jù)需求改。
可通過以下方法:
以100條數(shù)據(jù)為例,如果海量數(shù)據(jù)可參考。
如test表中有如下數(shù)據(jù):
現(xiàn)要將begintime改成當前時間,每10條提交一次。
可用如下存儲過程:
declare?
i?int;--定義變量
v_count?int;--定義變量
v_loop?int;--定義變量
begin
select?count(*)?into?v_count?from?test;--計算表內(nèi)數(shù)據(jù)總數(shù)
select?ceil(v_count/10)?into?v_loop?from?dual;--計算需要循環(huán)次數(shù)
i:=1;--為i賦值
while?i=v_loop?loop--循環(huán)退出條件
update?test?set?begintime=sysdate?where?begintime?is?null?and?rownum=10;--執(zhí)行更新
commit;--提交
i:=i+1;--i依次加1
end?loop;--結(jié)束循環(huán)
end;
如果是日期最小的記錄,可以直接用min。
update?org_info
set?op_type?=?1
where?occur_date?in?(select?min(occur_date)?from?org_info?group?by?id)
1、按時間分區(qū)表創(chuàng)建: 其中add_date_time為分區(qū)字段,每一年一個分區(qū)。插入100W數(shù)據(jù)。
2、增加一個分區(qū),分兩種情況:1.沒有maxvalue分區(qū)。2.有maxvalue分區(qū)。
3、創(chuàng)建的分區(qū)就是沒有maxValue的分區(qū),沒有maxvalue分區(qū)添加新分區(qū)。
4、有maxvalue分區(qū)添加新分區(qū):有了maxvalue,就不能直接add partition,而是需要max分區(qū)split。
5、合并分區(qū),相鄰的分區(qū)可以merge為一個分區(qū),新分區(qū)的下邊界為原來邊界值較低的分區(qū),上邊界為原來邊界值較高的分區(qū),原先的局部索引相應(yīng)也會合并,全局索引會失效,需要rebuild。