【发布时间】:2020-12-03 03:53:47
【问题描述】:
有一个查询是这样的:
select * from cars c where c.WheelCount > 0 or CountWheels(c) > 0
函数CountWheels 是为每一行调用,还是只为t.Count <= 0 所在的行调用?
问题是该函数包含每次都应该执行的逻辑——很可能是一个糟糕的设计;它是我几乎无法控制的代码的一部分。
这是一个简化的例子,我不能只写select * from cars c where CountWheels(c.Body) > 0,因为那样会删除一些数据。把它想象成:给我所有曾经有轮子的汽车,即使其中一些现在可能有 0 个轮子。
【问题讨论】:
-
Oracle 将可能仅在
WheelCount <= 0或NULL所在的行上调用该函数。它有一个非常好的优化器。
标签: sql oracle case where-clause sql-function