Sql 使用多种条件和/或

Sql 使用多种条件和/或,sql,oracle,Sql,Oracle,按特定顺序使用几个条件方便吗 我创建了以下函数,它接收每个参数的值,在屏幕上打印(输出),然后返回: 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(输出): 如果我使用由运算符“AND”或运算符“or”分隔的多个条件,我会在

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

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

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(输出):

如果我使用由运算符“AND”或运算符“or”分隔的多个条件,我会在屏幕上打印以下结果(输出):

这意味着,每当我有几个条件由运算符分隔时,“我应该在末尾使用“最有可能”,如果我有几个条件由运算符分隔时”或“我应该在开头放置“最有可能”?或者差异如此之小,以至于当前版本的Oracle没有注意到这一点?(“最有可能”的条件是,我们知道/假设的条件比其他条件更真实,因此我们将避免评估其他条件)

谢谢

请参阅文档:

计算包含多个条件的表达式时,Oracle 在计算条件之前,先计算具有较高优先级的条件 优先级较低。Oracle使用相等的 表达式中从左到右的优先级,如下所示 例外情况:

  • 对于多个条件,不保证从左向右求值 使用和连接

  • 对于多个条件,不保证从左向右求值 使用或连接

如上所述,WHERE子句中的条件顺序无关紧要,该求值顺序不受保证,Oracle可以以任何顺序自由求值与OR和运算符相关的条件
即使测试当前显示的顺序为3,2,1,也不能保证Oracle不会更改此顺序。

请参阅文档:

计算包含多个条件的表达式时,Oracle 在计算条件之前,先计算具有较高优先级的条件 优先级较低。Oracle使用相等的 表达式中从左到右的优先级,如下所示 例外情况:

  • 对于多个条件,不保证从左向右求值 使用和连接

  • 对于多个条件,不保证从左向右求值 使用或连接


如上所述,WHERE子句中的条件顺序无关紧要,该求值顺序不受保证,Oracle可以以任何顺序自由求值与OR和运算符相关的条件
即使测试当前显示的顺序是3,2,1,也不能保证Oracle不会更改此顺序。

此外,我相信
其中的函数(x)=“y”
将停止使用索引或缓存的任何机会。因此,您可能会受到更大的性能影响。此外,我相信
WHERE function(x)='y'
将阻止任何能够使用索引或缓存的机会。所以你可能会在那里受到更大的打击。
SELECT jmo_imp(45) FROM dual
/
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