存储过程中用游标插入数据太慢,怎么优化?

justalwaystotwo 2012-05-09 12:06:08
首先 库里有一个中间表bus,有存储重要数据的主表 receiving和他的明细表receivingdetail,中间表bus存的是主表 receiving和他的明细表receivingdetail的集中信息。 bus和receivingdetail 中的数据数目是相同的。

然后就是存储过程。它的作用是把中间表的数据放到 主表 receiving和他的明细表receivingdetail中。
在存储过程中 先建立存储过程 bus_mst 再 声明游标Cur_bus_mst(select distinct (字段)from bus )
然后 open Cur_bus_mst;
FETCH Cur_bus_mst Into bus_mst中的字段;
最后就是把存储过程bus_mst中的数据放到主表 receiving和他的明细表receivingdetail

不知道我说的明不明白,这个存储过程很慢,不知要怎么优化! 主要问题是明细表中的数据太多,一个主表中的数据对应一千多个明细表中的数据。 中间表的数据也有近万条, 严重影响别的流程的进度。
求大神们帮忙!
...全文
948 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
justalwaystotwo 2012-05-11
  • 打赏
  • 举报
回复
我的数据都放在游标里了,循环的时候还要做查询工作,建立索引是不是会快点。我的数据量大概为3千左右,建立什么类型的索引好呢?
justalwaystotwo 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
不要一次一次插入数据。要一批一批插入数据。

比如,可以先拼成插入语句,然后loop 到 100 写一次库。。这样估计会快很多。
[/Quote]
我的东西都是在存储过程里的,还怎么拼成插入语句啊?
还是我没明白你的意思。
Phoenix_99 2012-05-10
  • 打赏
  • 举报
回复
是主子表的话,应该能成批插入吧
zlb_chen 2012-05-10
  • 打赏
  • 举报
回复
不要一次一次插入数据。要一批一批插入数据。

比如,可以先拼成插入语句,然后loop 到 100 写一次库。。这样估计会快很多。
justalwaystotwo 2012-05-10
  • 打赏
  • 举报
回复
有没有能一次性插入多条数据的语句。
forgetsam 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

有没有能一次性插入多条数据的语句。
[/Quote]

insert into 目标表(目标字段1,目标字段2....) select ..... from ...

多表可以insert all
softwakaka 2012-05-09
  • 打赏
  • 举报
回复
试试动态变量可以不
justalwaystotwo 2012-05-09
  • 打赏
  • 举报
回复
说简单一点就是游标里有1千条数据,他会循环的去插入到主表和明细表,太慢了。

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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