Oracle的Null真是个麻烦的东西。
不能与其他变量进行比较,甚至不能和NULL进行比较。
仅仅能用IS (NOT) NULL。
来看这个实验,看看能不能知道执行的结果。
先准备数据:

执行一个查询,来猜猜结果

执行结果如下,是你的预期吗?

从结果来看,两行null被合并了。
问题来了,知道null和null是绝对不相等的,为什么会合并掉呢?
经查证,这里ORACLE内部用了个未公开的函数sys_op_map_nonnull
我们来测试一下这个函数
对于NULL

对于非NULL

我们看sys_op_map_nonnull(null)=FF,而FF这正是NULL存储在数据块中的编码。
利用该函数对两个NULL进行比较。

但是不要走火入魔,这种非公开函数不要在项目中使用,因为Oracle不会对它出现的问题负责哦。
项目中如果需要对可为NULL的变量进行比较操作,还是老老实实前面加是否为NULL的判断,再比较吧。
翻翻历史,温故知新
开始聊聊恶心的“锁”-- 3.Oracle DML表级锁概念
开始聊聊恶心的“锁”-- 2.Oracle DML行级锁概念
文章转载自InDataBase,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




