Oracle逻辑运算符是否短路之我见

大家好,今天想要和大家分享的主题是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文章版权属于作者,受法律保护。没有作者书面许可不得转载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值