189 8069 5689

oracle怎么分段更新,oracle 分批更新

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行。你也可以根据需求改。

Oracle存储过程,更新大量数据,如何循环分批次提交?

可通过以下方法:

以100条数据为例,如果海量数据可参考。

如test表中有如下数据:

现要将begintime改成当前时间,每10条提交一次。

可用如下存储过程:

declare 

i int;--定义变量

v_count int;--定义变量

v_loop int;--定义变量

begin

select count(*) into v_count from test;--计算表内数据总数

select ceil(v_count/10) into v_loop from dual;--计算需要循环次数

i:=1;--为i赋值

while i=v_loop loop--循环退出条件

update test set begintime=sysdate where begintime is null and rownum=10;--执行更新

commit;--提交

i:=i+1;--i依次加1

end loop;--结束循环

end;

跪求:oracle如何在数据分组后更新(update)?求大神指导啊~~~万分感谢

如果是日期最小的记录,可以直接用min。

update org_info

set op_type = 1

where occur_date in (select min(occur_date) from org_info group by id)

如何更新oracle表中的分区字段

1、按时间分区表创建: 其中add_date_time为分区字段,每一年一个分区。插入100W数据。

2、增加一个分区,分两种情况:1.没有maxvalue分区。2.有maxvalue分区。

3、创建的分区就是没有maxValue的分区,没有maxvalue分区添加新分区。

4、有maxvalue分区添加新分区:有了maxvalue,就不能直接add partition,而是需要max分区split。

5、合并分区,相邻的分区可以merge为一个分区,新分区的下边界为原来边界值较低的分区,上边界为原来边界值较高的分区,原先的局部索引相应也会合并,全局索引会失效,需要rebuild。


当前标题:oracle怎么分段更新,oracle 分批更新
网页路径:http://jkwzsj.com/article/phishe.html

其他资讯