10W级别数据校验,想用函数去执行校验并且返回一条自定义的记录

tseng_monkey 2017-12-14 03:46:44
背景:开发一个导入校验的功能,由于数据量大,为了方便批处理,所以前台通过导入单据号来实现对数据库对应单据信息的批处理。

目前项目存在的问题:由于数据量大,前期没考虑到这样一个问题,导致导入功能出现长时间未响应而报错,甚至占用内存爆炸,GC自动回收都不行了。所以想通过调用存储函数来将这10W级别的单号通过传入oracle存储函数进行批处理,校验,同时对单据的信息进行处理后,把需要的信息合并成一条记录返回。


------------------------------------------------------
各位大佬们,我这边遇到俩问题需要大佬们帮我:
1、对于这个存储函数,传参是一个List数组,我要怎么在oracle这块定义呢?还有返回值,我想要以一条记录返回,这样我在java那边就能以一个对象来接收相应的字段信息,可是目前有个问题,返回信息来了,字段名不知道怎么在oracle去定义。

2、以上的优化内存的思路正确吗?--这样直接传单号到存储函数去处理,我就不需要在java里面定义那么多的对象,不需要for循环那么多,然后做加减运算最后再保存了。
...全文
444 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tseng_monkey 2017-12-26
  • 打赏
  • 举报
回复
引用 4 楼 sxq129601 的回复:
这种不适合循环调存储过程,可能反而更慢增加后台负担。可以全部数据都加载到数据库的临时表中,然后调用存储过程去判断最终插入正式表。校验失败的数据在表后面标记一下
意思是在数据库建一个表作为临时存储数据的,先把导入的数据全部存进临时表,然后再到数据库去操作处理是吗?
tseng_monkey 2017-12-26
  • 打赏
  • 举报
回复
引用 2 楼 jdsnhan 的回复:
使用sqlldr把数据直接加载到临时表,然后再批处理临时表的数据,而不是用存储过程接收数据。
没有用过你说的这个方法,有没有例子给一个来呢?
tseng_monkey 2017-12-19
  • 打赏
  • 举报
回复
引用 1 楼 wandier 的回复:
用前台处理数据成文件,然后文件导入数据库这样不行吗
内存不够,虚拟机内存占用太多,因为导入的单号查询返回的数据量太大了
sxq129601 2017-12-19
  • 打赏
  • 举报
回复
这种不适合循环调存储过程,可能反而更慢增加后台负担。可以全部数据都加载到数据库的临时表中,然后调用存储过程去判断最终插入正式表。校验失败的数据在表后面标记一下
jdsnhan 2017-12-15
  • 打赏
  • 举报
回复
使用sqlldr把数据直接加载到临时表,然后再批处理临时表的数据,而不是用存储过程接收数据。
wandier 2017-12-14
  • 打赏
  • 举报
回复
用前台处理数据成文件,然后文件导入数据库这样不行吗

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧