如何解决Oracle /通用SQL-是否始终在所有条件检查位置?
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个车轮。
解决方法
是对每行调用CountWheels函数,还是仅对t.Count
通常,您不会选择此选项。与过程语言相反,SQL是一种描述性语言:您指定所需的结果,并相信优化器可以选择最佳的执行计划。
您可能尝试使用case
表达式来影响数据库,该表达式可以更好地控制执行流程:
where case
when c.WheelCount > 0 then 1
when CountWheels(c) > 0 then 1
end = 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。