17,140
社区成员




create procedure p_query_voice(
v_startime date
,v_endtime date
,sa_num stringarray --这个是我自定义的嵌套表类型,里面放着多个要查询的号码
,ResultSet out sys_refcursor
)
as
v_sqlcmd varchar2(1000);
begin
v_sqlcmd := 'select * from voice
where begintime between :1 and :2
and num in (select column_value from table(:3))';
open ResultSet for
v_sqlcmd
using v_starttime,v_endtime,sa_num;
end p_query_voice;
--首先很肯定的说动态sql的执行效率慢是必然的,这个没啥好解析的
--楼主想看执行计划,可以这么看:
--先在V$SQLAREA中找到这个SQL,然后得到SQL_ID,去V$SQL_PLAN去看它执行的计划
--如下:
--先根据sql语句查找sql_id
select *
from V$SQLAREA sr
where sr.SQL_TEXT like '你的sql%'
order by sr.FIRST_LOAD_TIME desc;
--再根据sql_id查找执行计划
select * from V$SQL_PLAN pa where pa.SQL_ID = '上面得到的sql_id';
--说实话楼主不如把你的代码贴出来研究下