gpt4 book ai didi

oracle10g - 有人可以帮我弄清楚 Oracle (10g) 的 AND/OR 短路电路吗?

转载 作者:行者123 更新时间:2023-12-04 06:22:29 25 4
gpt4 key购买 nike

考虑以下查询并注意 CALCULATE_INCENTIVE 函数:

SELECT EMP.* FROM EMPLOYEES EMPS
WHERE
EMP.STATUS = 1 AND
EMP.HIRE_DATE > TO_DATE('1/1/2010') AND
EMP.FIRST_NAME = 'JOHN' AND
CALCULATE_INCENTIVE(EMP.ID) > 1000
ORDER BY EMPS.ID DESC;

我的印象是 Oracle 使用与 .NET 在其和/或逻辑中使用的相同(或类似)短路。例如,如果 EMP.STATUS = 2,它不会费心评估表达式的其余部分,因为无论如何整个表达式都会返回 false。

在我的例子中,CALCULATE_INCENTIVE 函数是在数据库中的每个员工上调用的,而不仅仅是在前三个 WHERE 表达式返回的 9 条记录上调用。我什至尝试在我想要组合在一起进行短路评估的特定表达式周围加上括号,但我无法弄清楚。

任何人都知道如何获得 CALCULATE_INCENTIVE 不是 如果前面的任何表达式返回 false,要评估?

最佳答案

一种方法是将主要条件放入 Oracle 无法优化的子查询中,然后将次要条件放入外部查询中。确保 Oracle 不优化子查询的最简单方法是在 select 语句中包含 rownum:

SELECT * FROM (
SELECT EMP.*, ROWNUM
FROM EMPLOYEES EMPS
WHERE
EMP.STATUS = 1
AND EMP.HIRE_DATE > TO_DATE('1/1/2010')
AND EMP.FIRST_NAME = 'JOHN')
WHERE CALCULATE_INCENTIVE(ID) > 1000
ORDER BY EMPS.ID DESC;

关于oracle10g - 有人可以帮我弄清楚 Oracle (10g) 的 AND/OR 短路电路吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6385823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com