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使用相等的
表达式中从左到右的优先级,如下所示
例外情况:
- 对于多个条件,不保证从左向右求值 使用和连接
- 对于多个条件,不保证从左向右求值 使用或连接
即使测试当前显示的顺序为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