微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Oracle /通用SQL-是否始终在所有条件检查位置?

如何解决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 举报,一经查实,本站将立刻删除。