用游标打开一百万条记录的问题,进者又分!

yinleiyoung 2005-11-26 12:28:24
我现在想用游标对一百万条记录操作,不知道我需要注意那些地方?
请有经验的人进来帮我一下,谢谢!!
是不是需要分批读取?
具体怎么做给点代码,示范一下
谢谢
...全文
170 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
heyixiang 2005-11-28
  • 打赏
  • 举报
回复
关键在于每条记录的处理时间,还有就是利用到索引
yinleiyoung 2005-11-27
  • 打赏
  • 举报
回复
谢谢上面的兄弟们
继续讨论一下
liuyi8903 2005-11-27
  • 打赏
  • 举报
回复
注意关闭游标。
ATGC 2005-11-26
  • 打赏
  • 举报
回复
直接读就是了啊,100w记录不多的
zealot_zk 2005-11-26
  • 打赏
  • 举报
回复
拥有表处理100万数据时主要注意检索时一定要使用索引,另外就是对但条数据的处理不要时间过长,比如写文件等。
ab5669 2005-11-26
  • 打赏
  • 举报
回复
用游标处理100万条记录,没问题,只是速度慢了些。在处理的字段上要利用索引,以加快速度。
bierbin 2005-11-26
  • 打赏
  • 举报
回复
不需要有特殊的顾虑,只要你的SQL语句本身利用索引正确……
hlp912 2005-11-26
  • 打赏
  • 举报
回复
For Rec_Dispatch In ( Select Sizerun ,
Qty
From f_Dispatch_d
Where Fact_No = vi_fact_no
And Dis_No = vi_dis_no
And Fact_Odr_No = vi_odr_no
And Bat_No = vi_bat_no
And Qty > 0
Order By Sizerun )
Loop
/*处理过程*/
End Loop
hlp912 2005-11-26
  • 打赏
  • 举报
回复
在oracle中游标的处理我是用这种方式,这种方式效率要高些:
For Rec_Dispatch In ( Select Sizerun ,
Qty
From f_Dispatch_d
Where Fact_No = vi_fact_no
And Dis_No = vi_dis_no
And Fact_Odr_No = vi_odr_no
And Bat_No = vi_bat_no
And Qty > 0
Order By Sizerun )
Loop
Vn_Barcode_Count := Vn_Barcode_Count + Vn_BarSize_Count ;
Vn_BarSize_Count := Ceil( Rec_Dispatch.Qty/vi_barcode_qty ) ;
Vn_LastBar_Qty := Mod( Rec_Dispatch.Qty,vi_barcode_qty ) ;

If Vn_LastBar_Qty = 0 Then
Vn_LastBar_Qty := vi_barcode_qty ;
End If ;

Vc_BarNo := Vc_Lotnom||'21'||To_Char( Vn_Barcode_Seq+Vn_Barcode_Count+Vn_BarSize_Count,'fm0000' ) ;

Insert Into Barm_M( Fact_No ,Bar_no ,Lot_No ,Fact_Odr_No ,Sizerun ,
Qty ,Add_Mark ,Dis_No ,Bat_No ,Bar_Date )
Values(vi_fact_no ,Vc_BarNo ,Vc_Lotnom ,vi_odr_no ,Rec_Dispatch.Sizerun,
Vn_LastBar_Qty ,VC_BAR_ADD_MK1 ,vi_dis_no ,vi_bat_no ,To_Char(SysDate,'YYYYMMDD') );

Vc_BarNo := Vc_Lotnom||'31'||To_Char( Vn_Barcode_Seq+Vn_Barcode_Count+Vn_BarSize_Count,'fm0000' ) ;

Insert Into Barm_M( Fact_No ,Bar_no ,Lot_No ,Fact_Odr_No ,Sizerun ,
Qty ,Add_Mark ,Dis_No ,Bat_No ,Bar_Date )
Values(vi_fact_no ,Vc_BarNo ,Vc_Lotnom ,vi_odr_no ,Rec_Dispatch.Sizerun,
Vn_LastBar_Qty ,VC_BAR_ADD_MK1 ,vi_dis_no ,vi_bat_no ,To_Char(SysDate,'YYYYMMDD') );

Vc_BarNo := Vc_Lotnom||'51'||To_Char( Vn_Barcode_Seq+Vn_Barcode_Count+Vn_BarSize_Count,'fm0000' ) ;

Insert Into Barm_M( Fact_No ,Bar_no ,Lot_No ,Fact_Odr_No ,Sizerun ,
Qty ,Add_Mark ,Dis_No ,Bat_No ,Bar_Date )
Values(vi_fact_no ,Vc_BarNo ,Vc_Lotnom ,vi_odr_no ,Rec_Dispatch.Sizerun,
Vn_LastBar_Qty ,VC_BAR_ADD_MK1 ,vi_dis_no ,vi_bat_no ,To_Char(SysDate,'YYYYMMDD') );
-------------------------------------------------------------------------

Vn_Count := Vn_Count + 1 ;
End Loop ;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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