设为首页 收藏本站
查看: 746|回复: 0

[经验分享] Oracle逻辑运算符是否短路之我见

[复制链接]
YunVN网友  发表于 2016-8-13 07:21:13 |阅读模式
大家好,今天想要和大家分享的主题是Oracle的逻辑运算符是否短路。
首先说明一下什么是短路逻辑运算符,首先使用java的短路逻辑运算符&&和||来举例,代码如下

public class ShortCircuitTest {
public static void main(String[] args) {
if((isItSmall(3)) || (isItSmall(7))) {
System.out.println("Result is true");
} else {
System.out.println("Result is false");
}
if((isItSmall(6)) && (isItSmall(3))) {
System.out.println("Result is true");
} else {
System.out.println("Result is false");
}
}
public static boolean isItSmall(int i) {
if(i < 5) {
System.out.println("i < 5");
return true;
} else {
System.out.println("i >= 5");
return false;
}
}
}/* Output:
i < 5
Result is true
i >= 5
Result is false
*/

从以上程序的输出信息可以得出结论,短路不会浪费时间在无意义的计算上。
形式为exp1 && exp2,如果&&运算符左边的运算表达式exp1为false,那么其右边的运算表达式exp2不进行计算,因为&&运算符已经知道完整的表达式不可能是true,所以直接返回false
形式为exp1 || exp2,如果||运算符左边的运算表达式exp1为true,那么其右边的运算表达式exp2不进行计算,因为||运算符已经知道完整的表达式不可能是false,所以直接返回true
下面来讨论Oracle的逻辑运算符是否短路,本人的测试数据库是Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
首先创建一个测试function

create or replace function f return number is
begin
dbms_output.put_line('f');
return(1);
end f;

这个function的作用是用来验证是否被执行,如果执行会打印出字符串“f”
(1)验证sql语句的逻辑运算符是否短路

select 'x' from dual where (1 = 0 and f = 1);--打印出f
select 'x' from dual where (1 = 1 or f = 1);--没有打印信息

说明sql语句中的逻辑运算符and不具备短路功能,而or具备短路功能。
(2)验证plsql语句的逻辑运算符是否短路

begin
if 1 = 0 and f=1 then
null;
end if;
end;
--没有打印信息
begin
if 1 = 1 or f=1 then
null;
end if;
end;
--没有打印信息

说明plsql语句中的逻辑运算符and和or都具备短路功能。

声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-257106-1-1.html 上篇帖子: Oracle中日期时间的操作比较和加减 下篇帖子: 使用rownum三层循环实现Oracle的分页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表