oracle分批查询数据提交
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle分批查询数据提交相关的知识,希望对你有一定的参考价值。
我在oracle一张表中查询一个字段phone_number,有几千行,我想100行100行的查询出来提交。。
几千行对 oracle 来说不是问题,可以一次提交如果一定要这么做,有两种方式:
一,用游标打开,一行拼一个insert 语句,并计数;满100后提交
二,分页查询,每页100行 ,然后提交
我觉得:能一次提交的尽量不要分开提交,如果提交到一部分时候,出现问题了,提交的不能回滚了。增加了业务逻辑的复杂性。追问
领导让分开提交的,有没有例子啊??不知道怎么写,谢谢你
参考技术A 批量绑定,分批提交。例v$parameter表中name字段,代码如下:
declare
type coll_type is table of v$parameter.name%type index by pls_integer;--定义集合类型
coll coll_type;--定义集合对象
v_index pls_integer;--角标
cursor cur is--定义游标
select name
from v$parameter;
begin
open cur;
loop
fetch cur bulk collect into coll limit 20;--limit 1000限制批操作量100
for v_index in 1 .. coll.count
loop
dbms_output.put_line(coll(v_index));--输出集合中数据
end loop;
commit;
exit when cur%notfound;
end loop;
close cur;
end;本回答被提问者采纳
从数据库中分批取数据进行处理
思路1:
用分页查询的方式取
先查询出要处理的总数据量 count,然后假设每批要处理100条,
代码
//获取可push的记录进行发送消息
private void getData()
//查出总数据量
long count = xxxMapper.countByExample(example);
int pageSize = 100;
long pageNum = count / pageSize;
long left = count % pageSize;
if (left >= 1)
pageNum++;
List<Object> list;
int pageCount = 1;
//循环获取
while (true)
//分批查询数据
RowBounds rowBounds = new RowBounds((pageCount-1)*pageSize,pageSize);
list = xxxMapper.selectByExampleWithRowbounds(example, rowBounds);
//可以对分批查出的数据做处理
if(pageCount >= pageNum)
break;
pageCount++;
思路2:
用取模的方式取数据
int size = 1000;
int threadNum = count / size + 1;
for (int i = 0; i < threadNum; i++)
Map paramMap = new HashMap();
//分批查询
paramMap.put("threadNum", threadNum);
paramMap.put("mod", i);
//用 paramMap 去取模查询数据库// SELECT * FROM `tableName` WHERE id % threadNum = mod ; 即查询条件为 自增主键除以线程数余数为当前遍历到的 i
以上是关于oracle分批查询数据提交的主要内容,如果未能解决你的问题,请参考以下文章