NULL

在ORACLE中,将空字符串视为NULL,任何值与NULL比较结果都为NULL。例子:

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,也不等于空串,它不等于任何值,也不不等于任何值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值