按特定顺序使用几个条件方便吗?
我创建了以下函数,它接收每个参数的值,在屏幕(输出)上打印它,并返回它:
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 (输出):
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这意味着,每当我有几个条件由操作员分隔“和”我应该使用“最有可能”在结尾,如果我有几个条件分隔的操作“或”,我应该把“最有可能”开始?或者,两者之间的差别如此之小,以至于对于当前版本的Oracle来说,这一点没有被注意到吗?(“最有可能”的条件是,我们所知道/假设的条件比其他条件更真实,因此我们将避免评估其他条件)。
谢谢!!
发布于 2018-06-19 14:49:18
请参阅文档:条件优先
在计算包含多个条件的表达式时,Oracle先计算优先级较高的条件,然后再计算优先级较低的条件。Oracle计算表达式中从左到右具有相同优先级的条件,但有下列例外:
根据以上所述,在WHERE子句中条件的顺序并不重要,这种评估顺序不是保证的,Oracle可以任意地规避与OR和和运算符相关的条件。
即使目前的测试显示顺序为3,2,1,也不能保证Oracle不会更改此顺序。
https://stackoverflow.com/questions/50930878
复制相似问题