Oracle存储过程,更新大量数据,如何循环分批次提交? 50
例如下面两张表:班级表:classclassID--pk学生表:studentstudentID--pkclassID--fkage--普通字段,年纪一个班级对应多个学生...
例如下面两张表:
班级表: class
classID --pk
学生表: student
studentID --pk
classID --fk
age --普通字段,年纪
一个班级对应多个学生。
新的一年到来,我们指定一个classID, 把这个班级里所有学生都age + 1,需要的是:
普通做法是: update student set age = age + 1 where classID = #classID#.,如果学生特别多,可能数据库受不了,所以所以要求循环处理,每10个学生更新一次,请问如何做到,求高效的SQL语句 展开
班级表: class
classID --pk
学生表: student
studentID --pk
classID --fk
age --普通字段,年纪
一个班级对应多个学生。
新的一年到来,我们指定一个classID, 把这个班级里所有学生都age + 1,需要的是:
普通做法是: update student set age = age + 1 where classID = #classID#.,如果学生特别多,可能数据库受不了,所以所以要求循环处理,每10个学生更新一次,请问如何做到,求高效的SQL语句 展开
4个回答
展开全部
可通过以下方法:
以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;
展开全部
你想多了.此类的更新 就应该是 update student set age = age + 1 where classID = #classID#.
依靠循环处理 ,增加事务的递交次数,反而 影响 数据库服务器的性能 和资源.
相信我,数据库处理的能力远超过你的想象,早在15年前,远古的sql2000都可以承载 百万级的数据炒作.
依靠循环处理 ,增加事务的递交次数,反而 影响 数据库服务器的性能 和资源.
相信我,数据库处理的能力远超过你的想象,早在15年前,远古的sql2000都可以承载 百万级的数据炒作.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
再多Oracle也处理得了,即使是百万千万级别,再多就不适合用更新做法,思路就要换了
如果你非要这么弄的话,通过rowid和rownum来做循环,但是意义不大
如果你非要这么弄的话,通过rowid和rownum来做循环,但是意义不大
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-10-23
展开全部
参考:
www.
cnblogs.
com/
mellowsmile/
p/
4721742
.html
www.
cnblogs.
com/
mellowsmile/
p/
4721742
.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询