求oracle 查询调用存储过程非常慢的解决方案,高手赐教

jkan5522 2009-05-05 08:48:39
gettransacttime 内部函数
执行里面的查询,执行起来2秒
select oprt.F_ID, oprt.f_dispatchdate,
gettransacttime (oprt.f_dispatchdate,TO_DATE ('2009-5-5 17:14:02','YYYY-MM-DD HH24:MI:SS')) Beginusetime, --得到案件到目前为止处理的时间(分)
( NVL (oprt.f_timelimit, 0) * 60 + NVL (oprt.f_timeslowminute, 0) + NVL (oprt.f_timelapseminute, 0) ) f_timelimit --总共处理分钟数
from oprt_s_main oprt where oprt.f_moveend IN (SELECT f_code
FROM sys_s_state sta WHERE sta.f_node IN (6))


当嵌套后,执行起来将近40秒
select F_ID,f_dispatchdate,Beginusetime,f_timelimit from
(
select oprt.F_ID, oprt.f_dispatchdate,
gettransacttime (oprt.f_dispatchdate,TO_DATE ('2009-5-5 17:14:02','YYYY-MM-DD HH24:MI:SS')) Beginusetime, --得到案件到目前为止处理的时间(分)
( NVL (oprt.f_timelimit, 0) * 60 + NVL (oprt.f_timeslowminute, 0) + NVL (oprt.f_timelapseminute, 0) ) f_timelimit --总共处理分钟数
from oprt_s_main oprt where oprt.f_moveend IN (SELECT f_code
FROM sys_s_state sta WHERE sta.f_node IN (6))
) t where f_timelimit between Beginusetime and (Beginusetime + 120 )


去除where条件,执行起来2秒

select F_ID,f_dispatchdate,Beginusetime,f_timelimit from
(
select oprt.F_ID, oprt.f_dispatchdate,
gettransacttime (oprt.f_dispatchdate,TO_DATE ('2009-5-5 17:14:02','YYYY-MM-DD HH24:MI:SS')) Beginusetime, --得到案件到目前为止处理的时间(分)
( NVL (oprt.f_timelimit, 0) * 60 + NVL (oprt.f_timeslowminute, 0) + NVL (oprt.f_timelapseminute, 0) ) f_timelimit --总共处理分钟数
from oprt_s_main oprt where oprt.f_moveend IN (SELECT f_code
FROM sys_s_state sta WHERE sta.f_node IN (6))
) t

将内部函数gettransacttime 去掉,改成下面这样,执行起来2秒
select F_ID,f_dispatchdate,Beginusetime,f_timelimit from
(
select oprt.F_ID, oprt.f_dispatchdate,
10 Beginusetime, --得到案件到目前为止处理的时间(分)
( NVL (oprt.f_timelimit, 0) * 60 + NVL (oprt.f_timeslowminute, 0) + NVL (oprt.f_timelapseminute, 0) ) f_timelimit --总共处理分钟数
from oprt_s_main oprt where oprt.f_moveend IN (SELECT f_code
FROM sys_s_state sta WHERE sta.f_node IN (6))
) t where f_timelimit between Beginusetime and (Beginusetime + 120 )



希望高手多多指教,这个问题困扰小弟一个下午了,小弟在此先谢过,虽然找出个大概原因,但不知道如何解决
...全文
964 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jkan5522 2009-05-06
  • 打赏
  • 举报
回复
gettransacttime (oprt.f_dispatchdate,TO_DATE ('2009-5-5 17:14:02','YYYY-MM-DD HH24:MI:SS')) Beginusetime

oprt.f_dispatchdate是案件的开始时间,TO_DATE ('2009-5-5 17:14:02','YYYY-MM-DD HH24:MI:SS')是案件到目前的时间,
gettransacttime是计算案件从开始到目前总共花掉多少分钟,
gettransacttime函数是内部计算时间用的,里面牵扯了好几张表的查询,有内部逻辑的判断
ks_reny 2009-05-05
  • 打赏
  • 举报
回复
估计问题出现在gettransacttime上了,贴出gettransacttime 的代码看能不能优化一下。
oraclelogan 2009-05-05
  • 打赏
  • 举报
回复
把这个函数gettransacttime 的sql脚本贴出来,大家帮你分析分析吧!
Tomac 2009-05-05
  • 打赏
  • 举报
回复
内部函数gettransacttime 的代码是什么? 关键在于它了.
jkan5522 2009-05-05
  • 打赏
  • 举报
回复
还有,忘记说了,里面的查询语句查询出来是109条数据,加了WHERE条件后的数据为一条

17,086

社区成员

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

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