oracle函数的延迟过多

问题描述

这是一个票据表示例:(billnr不是唯一的。renr,filnr,kassanr的组合是唯一的)

-printmapping mapping.txt

我需要renr,filnr,kassanr的唯一组合的总和(价格)(如果它们具有resnr 100)。 也就是说:10 + 15 + 6 = 31

我有这个查询:

id   renr(billnr)   filnr(store)       kassanr(cashier)     price  res_nr(reservation)        
10        1             2                 3                   10          100
11        1             2                 3                   15          null
12        1             2                 3                   6           null   
13        1             2                 4                   120         101

当我执行此查询时,仅需7秒,就可以了! 但是当我在函数中编写此函数时,该函数需要21秒,我不明白为什么?!

select sum(rk.price) 
from bill rk,(select rk1.renr,rk1.filnr,rk1.kassanr from bill rk1 where rk1.res_nr = :IN_n_resnr)  tr
where rk.filnr = tr.filnr 
      and rk.kassanr = tr.kassanr 
      and rk.renr = tr.renr;

我试图用WITH CLAUSE编写函数。但这也需要21秒。

CREATE OR REPLACE FUNCTION FUN_TEST (IN_n_resnr in number) return number
is
  v_return    number := null;      
begin   
         select sum(rk.price) into v_return
         from bill rk,rk1.kassanr from bill rk1 where rk1.res_nr = :IN_n_resnr)  tr
         where rk.filnr = tr.filnr 
         and rk.kassanr = tr.kassanr 
         and rk.renr = tr.renr;              
  return(v_return);        
end;

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)