一样的SQL> select 1 from dual where '' is null; 1 ---------- 1
一般情况下,都可以认为''就是null,我想oracle应该是先把''作为空字符串处理成null,再作其他处理的,就像bzszp(SongZip)老大的例子,'' is null 是成立的,两者是等价的,下面例子又可以看出''和null不是完全等价的: SQL> select 1 from dual union select '' from dual;select 1 from dual union select '' from dualORA-01790: 表达式必须具有与对应表达式相同的数据类型SQL> select sysdate from dual union select '' from dual;select sysdate from dual union select '' from dualORA-01790: 表达式必须具有与对应表达式相同的数据类型这里union要先判断2个select 子句的字段类型是否匹配,显然''和数字、日期类型都不能匹配,而null可以和任何数据类型匹配,上面把''换成null就不会出错了 SQL> select 1 from dual union select null from dual; 1 ---------- 1
个人的一点浅见
但'' 是会占用的
----------
1
SQL> select 1 from dual union select '' from dual;select 1 from dual union select '' from dualORA-01790: 表达式必须具有与对应表达式相同的数据类型SQL> select sysdate from dual union select '' from dual;select sysdate from dual union select '' from dualORA-01790: 表达式必须具有与对应表达式相同的数据类型这里union要先判断2个select 子句的字段类型是否匹配,显然''和数字、日期类型都不能匹配,而null可以和任何数据类型匹配,上面把''换成null就不会出错了
SQL> select 1 from dual union select null from dual; 1
----------
1
说白了,一个是有值,一个是无值,当然不同啦。
空值通常是指字符串的‘’,是字符型,而null不属于任何类型。
所以,不能向非空字符字段插入''。
很奇怪oracle为什么要这样设定。
...
else
...
end if