oracle中有一亿多行数据的表,要全表更新某字段值,有什么号的方法?

如题所述

你可以写一个存储过程来执行,由于数据量大,如果直接更新,数据库UNDO表空间肯定会满,会产生异常。
过程如下,给你参考下。
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行。你也可以根据需求改。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-17
正常更新大概也就2个小时吧,把update 操作改成insert 写入,去掉日志,会快点。1亿多也不是很多吧。
第2个回答  2012-07-17
除了楼上分段更新的方法

还有一个换硬件的方法,使用exadata。10秒钟搞定O(∩_∩)O~