在网上看了oracle存储过程优化的资料,都说尽量不要使用游标,我现在要优化一个存储过程,不使用游标的话那要用什么来代替游标呢,下面是我的存储过程中的游标:
cursor track_result is
select v.procinstid_,v.value_,r.purc_report_id,r.purc_pro_id,r.purc_pro_name,
t.team_name,r.purc_type,r.requi_form,r.build_name from cg_purchase_report r,
jbpm4_hist_var v,cg_bid_team t where r.bid_team=t.bid_team_id and
r.purc_report_id=v.value_ and v.varname_='pkId' and
v.procinstid_ like 'requirementsReport%' and r.purc_report_state=3;
begin
for tr in track_result loop
……
end loop;
end;
如上面代码 我要怎么改,效率会比以前好点,不使用游标的话,请高手们帮忙。。。
oracle中怎么代替游标
答案:3 悬赏:40
解决时间 2021-04-09 06:17
- 提问者网友:月葬花瑰
- 2021-04-08 07:46
最佳答案
- 二级知识专家网友:转身→时光静好
- 2021-04-08 09:06
你说的资料上说的尽量不使用游标,那就是使用动态sql+execute immediate的方式了。这主要是程序设计上的问题,比如说一些表名或者字段名,可以使用变量来代替,这样写程序的时候麻烦点,但是方便日后维护。取数据用游标没什么错误,看你的存储过程,重要的是还是优化sql。或者可以使用bulk collect 批量的方式取数据。
全部回答
- 1楼网友:心与口不同
- 2021-04-08 10:58
其实,数据量不是很大用游标也没事,主要是往往把数据存到一个集合,除了使用游标读取数据,没有很方便的办法,我也在为此优化问题犯愁,希望有高人指点
- 2楼网友:虚伪的现实
- 2021-04-08 09:47
游标(cursor)是系统为用户开设的一个数据缓冲区,存放sql语句的执行结果。每个游标区都有一个名字,用户可以用sql语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯