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

 我来答
请叫我召哥
推荐于2020-12-31 · TA获得超过792个赞
知道小有建树答主
回答量:572
采纳率:95%
帮助的人:381万
展开全部
你可以写一个存储过程来执行,由于数据量大,如果直接更新,数据库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行。你也可以根据需求改。
匿名用户
2012-07-17
展开全部
正常更新大概也就2个小时吧,把update 操作改成insert 写入,去掉日志,会快点。1亿多也不是很多吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
寒默忧伤
2012-07-17 · TA获得超过550个赞
知道小有建树答主
回答量:759
采纳率:0%
帮助的人:432万
展开全部
除了楼上分段更新的方法

还有一个换硬件的方法,使用exadata。10秒钟搞定O(∩_∩)O~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式