1空值表达式与AND
程序段1:
set serveroutput on
DECLARE
my_name varchar2(10) :=’SCOTT’;
other_name varchar2(10):=NULL;
BEGIN
IF (my_name = ‘SCOTT’ and other_name = ‘JOIN’) THEN
dbms_output.put_line(‘CONDITION_TRUE’);
ELSE
dbms_output.put_line(‘CONDITION_FALSE’);
END IF;
END;
程序段2:
set serveroutput on
DECLARE
my_name varchar2(10) :=’SCOTT’;
other_name varchar2(10):=NULL;
BEGIN
IF NOT (my_name = ‘SCOTT’ and other_name = ‘JOIN’) THEN
dbms_output.put_line(‘CONDITION_TRUE’);
ELSE
dbms_output.put_line(‘CONDITION_FALSE’);
END IF;
END;
这两个程序段执行结果均为:CONDITION_FALSE
因为other_name为NULL,将它与and操作符结合时,得不到任何有意义的结果,也就是得到的结果既不是true也不是false,当if判断式存在这种情况时,执行的都是else部分。
【注】如果判断式是一个值为NULL的变量与一个AND操作符相结合而成的,就得不到期望的结果。值为NULL的变量是没有值的。因此,无法将它与任何值进行比较,也就无法得到任何有意义的结果。与NULL变量相比较的表达式得到的是空值。如果这样一个表达式存在于含有ELSE部分的IF语句中,由于代码不等于TRUE,所以就会沿着ELSE路径执行。但是代码也不等于FALSE,所以即使将IF逻辑取反,结果同样是执行ELSE部分。
程序段1:
set serveroutput on
DECLARE
my_name varchar2(10) :=’SCOTT’;
other_name varchar2(10):=NULL;
BEGIN
IF (my_name = ‘SCOTT’ and other_name = ‘JOIN’) THEN
dbms_output.put_line(‘CONDITION_TRUE’);
ELSE
dbms_output.put_line(‘CONDITION_FALSE’);
END IF;
END;
程序段2:
set serveroutput on
DECLARE
my_name varchar2(10) :=’SCOTT’;
other_name varchar2(10):=NULL;
BEGIN
IF NOT (my_name = ‘SCOTT’ and other_name = ‘JOIN’) THEN
dbms_output.put_line(‘CONDITION_TRUE’);
ELSE
dbms_output.put_line(‘CONDITION_FALSE’);
END IF;
END;
这两个程序段执行结果均为:CONDITION_FALSE
因为other_name为NULL,将它与and操作符结合时,得不到任何有意义的结果,也就是得到的结果既不是true也不是false,当if判断式存在这种情况时,执行的都是else部分。
【注】如果判断式是一个值为NULL的变量与一个AND操作符相结合而成的,就得不到期望的结果。值为NULL的变量是没有值的。因此,无法将它与任何值进行比较,也就无法得到任何有意义的结果。与NULL变量相比较的表达式得到的是空值。如果这样一个表达式存在于含有ELSE部分的IF语句中,由于代码不等于TRUE,所以就会沿着ELSE路径执行。但是代码也不等于FALSE,所以即使将IF逻辑取反,结果同样是执行ELSE部分。