在ORACLE中,将空字符串视为NULL,任何值与NULL比较结果都为NULL。例子:
DBMS输出:不等
DBMS输出:不等
DBMS输出:不等
在oracle看来,''就是空值,所以一个非空字符字段就无法插入空字符串了。
因为空值表示缺少数据,所以空值和其它值没有可比性,即不能用等于、不等于、大于或小于和其它数值比较,当然也包括空值本身(但是在decode中例外,两个空值被认为是等价)。
测试空值只能用比较操作符IS NULL 和IS NOT NULL。如果使用带有其它比较操作符的条件表达式,并且其结果依赖于空值,那么其结果必定是NULL。在where条件中,Oracle认为结果为NULL的条件为FALSE,带有这样条件的select语句不返回行,也不返回错误信息。
当查询条件为:a.state<>'Y' 没有出现ID=2的记录,原因是:null是个特殊的值,它不等于0,也不等于空串,它不等于任何值,也不不等于任何值。
DECLARE
i VARCHAR2(10) := NULL;
v VARCHAR2(10) := 'ABC';
BEGIN
IF(i = v)
THEN
DBMS_OUTPUT.PUT_LINE('相等');
ELSE
DBMS_OUTPUT.PUT_LINE('不等');
END IF;
END;
DBMS输出:不等
DECLARE
i VARCHAR2(10) := '';
v VARCHAR2(10) := 'ABC';
BEGIN
IF( NVL(i,' ') <> NVL(v,' '))
THEN
DBMS_OUTPUT.PUT_LINE('不等');
ELSE
DBMS_OUTPUT.PUT_LINE('相等');
END IF;
END;
DBMS输出:不等
DECLARE
i VARCHAR2(10) := ' ';
v VARCHAR2(10) := 'ABC';
BEGIN
IF(i <> v)
THEN
DBMS_OUTPUT.PUT_LINE('不等');
ELSE
DBMS_OUTPUT.PUT_LINE('相等');
END IF;
END;
DBMS输出:不等
在oracle看来,''就是空值,所以一个非空字符字段就无法插入空字符串了。
因为空值表示缺少数据,所以空值和其它值没有可比性,即不能用等于、不等于、大于或小于和其它数值比较,当然也包括空值本身(但是在decode中例外,两个空值被认为是等价)。
测试空值只能用比较操作符IS NULL 和IS NOT NULL。如果使用带有其它比较操作符的条件表达式,并且其结果依赖于空值,那么其结果必定是NULL。在where条件中,Oracle认为结果为NULL的条件为FALSE,带有这样条件的select语句不返回行,也不返回错误信息。
假设表有2个字段ID,STATE。 ID为主字段,STATE可为空。
create table a
(
ID VARCHAR2(10) not null,
STATE VARCHAR2(3)
)
insert into a ('ID','STATE') values('1','Y');
insert into a ('ID') values('2');
insert into a ('ID') values('3','N');
====================================================
select * from a where a.state='Y'
结果集为
ID SATE
-------------
1 Y
select * from a where a.state<>'Y'
结果集为
ID SATE
-------------
3 N
select * from a where a.state=null
结果集为空
select * from a where a.state is null
结果集为
ID SATE
-------------
2
当查询条件为:a.state<>'Y' 没有出现ID=2的记录,原因是:null是个特殊的值,它不等于0,也不等于空串,它不等于任何值,也不不等于任何值。