求oracle 查询调用存储过程非常慢的解决方案,高手赐教
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 )
希望高手多多指教,这个问题困扰小弟一个下午了,小弟在此先谢过,虽然找出个大概原因,但不知道如何解决
执行里面的查询,执行起来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 )
希望高手多多指教,这个问题困扰小弟一个下午了,小弟在此先谢过,虽然找出个大概原因,但不知道如何解决
...全文
相关推荐
Oracle存储过程及调用
Oracle存储过程语法 Oracle的存储过程语法如下: create procedure 存储过程名称(随便取) is 在这里可以定义常量、变量、游标、复杂数据类型这里可以定义变量、常量 begin 执行部分 end; (2)带参数的存储过程语法: create procedure 存储过程名称(随便取) (变量1 数据类型,变量2 数据类型,...,变量n 数据类型) is 在这里可以定义常量、变量、游标、复杂数据类型这里可以定义变量、常量 begin 执行部分 end; (3)带输入、输出参数的存储过程语法: create procedure
关于oracle中clob字段查询慢的问题及解决方法
最近在用oracle的过程中用到了对blob字段模糊查询的问题。接下来通过本文给大家分享关于oracle中clob字段查询慢的问题及解决方法,需要的的朋友参考下吧
C#调用oracle方法(包括调用存储过程)
详细的记录了C#如何调用oracle以及带有存储过程输出变量的方法,适合初学者。
oracle函数调用存储过程
oracle函数调用存储过程.doc
Spring boot调用Oracle存储过程的两种方式及完整代码
主要给大家介绍了关于Spring boot调用Oracle存储过程的两种方式及完整代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧


