在select vs调用临时表中调用函数

时间:2012-09-04 11:07:16

标签: oracle

只是看看是否有任何方法可以采取以下行为。

目前我在做

select * from table_1 t1  where function_call(t1.col1, t1.col2) <> 0;

我调用函数function_call的原因是,该函数有表table_2,我没有访问权限。我可以访问的唯一方法是通过一个包。

是否有任何改变上述行为的方法,在from子句中使用表信息,而不是在where子句中调用function_call。

喜欢,

select * from table_1 t1, package_x.get_table_2() where t1.col1 = 1 and t1.col2 = 1 and t1.col3 = t2.col3

1 个答案:

答案 0 :(得分:1)

我同意从WHERE子句调用函数可能会导致性能降低,因为这很可能会导致TABLE_1的完整表扫描,并且TABLE_1中的每一行都会调用一次函数}。我可以想到您的网站可以做的几件事:

  1. 授予对TABLE_1的必要访问权限。
  2. 在TABLE_1上创建一个视图,该视图限制可以看到的数据,并在视图上授予适当的访问权限,或者
  3. 以缓慢的访问时间生活。
  4. 分享并享受。