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

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

可通过以下方法:

以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

这个问题不难:

直接输出数组的话,好像每增加一个单元还得重定义一次下标,觉得不值。如果是我来做这个的话会把NavName = rs("NavName")改成NavName = NavName &"," &rs("NavName"),最后在循环结束后再NavName=split(NavName,",")来得到。

后面这个补充问题看得不太明白,也许把前面的问题按我说的思路做了后自然解决了。

NavName在上文应该是一个数组呀,怎么又是NavName(1000)这种函数的调用写法了呢。

ubound(NavName)可以取得一个数组的元素个数的。

如果数据量比较大建议在SQL语句中这样写select top 条数 * from Navigation ...这样要显示多少条就取多少条,如果是新闻索引页等建议把 * 换成只用得到的列名,这样虽然在代码上多了十几个字符,但感觉在大并发特别大数据量时的打开速度还是明显的。

补充说明:上面那个用逗号作分隔只是感觉比较像数组易于理解阅读,如果每个单元值是大段文字其中也可能出现逗号的话,这里就用别的比较少用的符号来分隔,比如^ $等。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10863283.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存