首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用几种条件和/或的性能

使用几种条件和/或的性能
EN

Stack Overflow用户
提问于 2018-06-19 14:28:54
回答 1查看 83关注 0票数 1

按特定顺序使用几个条件方便吗?

我创建了以下函数,它接收每个参数的值,在屏幕(输出)上打印它,并返回它:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION jmo_imp (p_value VARCHAR2)
RETURN VARCHAR2 IS
BEGIN
  dbms_output.put_line(p_value);
  RETURN p_value;
END;
/

因此,下一个查询返回45,并在屏幕上打印45 (输出):

代码语言:javascript
复制
SELECT jmo_imp(45) FROM dual
/

如果使用由操作符“和”或运算符“或”分隔的几个条件,则在屏幕(输出)上输出以下结果:

代码语言:javascript
复制
SELECT 'Hello'
  FROM dual
 WHERE slu.jmo_imp('WHERE1') = 'WHERE1'
   AND slu.jmo_imp('WHERE2') = 'WHERE2'
   AND slu.jmo_imp('WHERE3') = 'WHERE3'
/

WHERE3
WHERE2
WHERE1

SELECT *
  FROM (SELECT 1 col FROM dual
        UNION
        SELECT 2 col FROM dual
        UNION
        SELECT 3 col FROM dual
        UNION
        SELECT 4 col FROM dual)
 WHERE slu.jmo_imp(col) = 4
    OR slu.jmo_imp(col) = 3
    OR slu.jmo_imp(col) = 2
    OR slu.jmo_imp(col) = 1
/

1
1
1
1
2
2
2
3
3
4

这意味着,每当我有几个条件由操作员分隔“和”我应该使用“最有可能”在结尾,如果我有几个条件分隔的操作“或”,我应该把“最有可能”开始?或者,两者之间的差别如此之小,以至于对于当前版本的Oracle来说,这一点没有被注意到吗?(“最有可能”的条件是,我们所知道/假设的条件比其他条件更真实,因此我们将避免评估其他条件)。

谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-19 14:49:18

请参阅文档:条件优先

在计算包含多个条件的表达式时,Oracle先计算优先级较高的条件,然后再计算优先级较低的条件。Oracle计算表达式中从左到右具有相同优先级的条件,但有下列例外:

  • 不保证从左到右计算多个条件连接使用和
  • 对于使用OR连接的多个条件,不保证从左到右进行计算。

根据以上所述,在WHERE子句中条件的顺序并不重要,这种评估顺序不是保证的,Oracle可以任意地规避与OR和和运算符相关的条件。

即使目前的测试显示顺序为3,2,1,也不能保证Oracle不会更改此顺序。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50930878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档