oracle 存储过程 select语句的where条件中如果使用形参,则执行速度会变慢

procedure uploadSealsCode(p_app_no in varchar2, --检定任务
p_bar_code in varchar2, --设备条码
p_ret_code out varchar2,
p_ret_result out clob) is
。。。。。。。
。。。。。。。
for i in 1 .. a_bar_codes_array.count loop
delete from mt_SEAL_INST m where m.detect_task_no = p_app_no_temp and m.BAR_CODE = a_bar_codes_array(i);
insert into mt_SEAL_INST
select m.detect_task_no,
m.sys_no,
m.equip_categ,
t.bar_code,
c.SEAL_POSITION,
c.SEAL_BAR_CODE,
to_char(c.SEAL_DATE, 'yyyy-mm-dd hh24:dd:ss'),
c.SEALER_NO,
to_char(sysdate, 'yyyy-mm-dd hh24:dd:ss'),
0,
null,
'01'
from mt_detect_task m,mt_detect_out_equip t, CMD_SEAL_INST_RST c
where m.detect_task_no = p_app_no
and c.bar_code = a_bar_codes_array(i)
and m.detect_task_no = t.detect_task_no
and m.detect_task_no = c.task_no
and t.bar_code = c.bar_code;
end loop;

如果where条件直接写成where m.detect_task_no = ‘23232323’,则执行速度很快,如果使用形参速度会慢很多,请问有什么办法解决?

第1个回答  2015-10-09
可能是使用参数时未走索引,可以尝试强制索引。本回答被网友采纳
第2个回答  2015-10-09
建议使用绑定变量,避免多次硬解析!
第3个回答  2018-03-02
可以使用where m.detect_task_no = '||p_app_no||'
第4个回答  2015-10-09
应该是数据类型的问题吧,where m.detect_task_no = '''||p_app_no||''' 这样试试呢本回答被提问者采纳