最近遇到这样的问题:
select *
from table_A
where a>10 and b='Good' and functionInvoke('test')='Y'
functionInvoke 是一个定义好的function.现在有个疑问是:
如果总纪录有1000条
where a>10 and b='Good' 能够查询出200条 那么functionInvoke的调用是在这200条的基础上还是在1000条的基础上呢?
据说这类function的调用是针对全局的,不知道各位有何高见?

解决方案 »

  1.   

    and 是从左到右依此判断,就是说如果
      a>10 and b='Good'
    一旦有一个为false,就返回了。
    也就是说: 至少200
      

  2.   

    楼上的意思是function的调用是在两个条件的基础上的?
    就是说function不会不理会前面两个条件而去做全局的查询?
      

  3.   

    oracle是从下往上,从右到左解析SQL语句的
      

  4.   

    你把函数的放在最上面,能过滤最多数据的放在最下面
    看执行计划
    先运行
    set autotrace on或者set autotrace on explain不过对于函数无法给正确给出执行计划的
      

  5.   

    个人感觉是200条,要看执行计划在pl/sql里按下F5就可以看到了.
      

  6.   

    oracle是从右到左的
    不过后面的会不会以前面的为基础,就不清楚了
      

  7.   

    and functionInvoke('test')='Y' 
    跟and c='Y'(假设的)
    逻辑上是一样的啊
    所以当然是200条,这跟函数不函数的没有关系。