高手帮忙,关于oracle自定义函数调用的问题

setmind 2005-05-15 08:07:08
我在oracle中自定义了一个函数,get_data 在数据库中调用是这样的
select bh,get_data(bh,1),get_data(bh,2) where get_data(bh,1)>0 or get_data(bh,2)>0
程序没用错误,但速度慢的很,请高手给出解决的办法。
...全文
316 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
fibbery 2005-05-22
  • 打赏
  • 举报
回复
select bh,get_data(bh,1),get_data(bh,2) where 0<get_data(bh,1)
union
select bh,get_data(bh,1),get_data(bh,2) where 0<get_data(bh,2)

试一试这个.

但是你在索引列应用函数,可能导致索引不会被使用,从而效率很低,
可以把函数的算法以及具体功能讲一讲吗?看看有没有提高效率的可能.
hcjp 2005-05-21
  • 打赏
  • 举报
回复
怎么在pl_sql 看sql的执行步骤 执行情况

new --- explain plan window

把你要执行的sql 拷贝到窗口中
根据你要查看的对象选择optimizer goal

你在下面就可以看到oralce的执行过程了
hedx 2005-05-20
  • 打赏
  • 举报
回复
能问一下是在pb里调用的吗,怎么调用的?
hedx 2005-05-20
  • 打赏
  • 举报
回复
是DECLARE test PROCEDURE FOR HE_TEST(:tin,:tout1,:tout2) ;
EXECUTE test ;
FETCH test INTO :tout1, :tout2 ;
这样调用吗?
setmind 2005-05-20
  • 打赏
  • 举报
回复
是在pb里调用,请问w7a8(阿飞)怎么才能把函数填加到索引里
w7a8 2005-05-19
  • 打赏
  • 举报
回复
看看执行计划吧,一定是用了全表扫描
如果增加index的话,函数也要在内
luotitan 2005-05-19
  • 打赏
  • 举报
回复
笨办法有一个,就是把get_data(bh,1),get_data(bh,2)都做为一个列(非计算列)保存到数据库中,用触发器生成。这样搜索的时候必然要快一些。

主要和表记录数和get_data的复杂度有关。
setmind 2005-05-19
  • 打赏
  • 举报
回复
能说明一下吗
hcjp 2005-05-19
  • 打赏
  • 举报
回复
你可以去用pl-sql调试下,
看下执行过程,是否有全表扫描的现象
别告诉我你不知道用pl_sql查看执行计划
setmind 2005-05-15
  • 打赏
  • 举报
回复
不知为什么,这个更慢啊
setmind 2005-05-15
  • 打赏
  • 举报
回复
不知这什么,这个更慢啊
fibbery 2005-05-15
  • 打赏
  • 举报
回复
忘了from
fibbery 2005-05-15
  • 打赏
  • 举报
回复
select * from (select bh,get_data(bh,1) a,get_data(bh,2) b) tbl where tbl.a>0 or tbl.b>0;
试一试这个.
setmind 2005-05-15
  • 打赏
  • 举报
回复
我是跟据这个编号,要根据相应要求计算出一个数据值
fibbery 2005-05-15
  • 打赏
  • 举报
回复
增加个索引在bh上,说说你的函数都作了些什么?
setmind 2005-05-15
  • 打赏
  • 举报
回复
再没人知道了吗

401

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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