暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

冷知识:sys_op_map_nonnull()

InDataBase 2021-04-26
1876

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的判断,再比较吧。



翻翻历史,温故知新

开始聊聊“锁”-- 5.Oracle DDL锁的概念

开始聊聊“锁”-- 4.Oracle DML表锁的实验

开始聊聊恶心的“锁”-- 3.Oracle DML表级锁概念

开始聊聊恶心的“锁”-- 2.Oracle DML行级锁概念

开始聊聊恶心的“锁”-- 1.一个故事了解Oracle有哪些锁

死锁与悲观锁、乐观锁不是一类东西

骨灰级科普-Oracle的序列可能不连续

后台翻页必用的rownum,你知道它的处理逻辑吗?

总在面试时被问COUNT(*)、COUNT(1)哪个快?

NVL系与Decode系,他们的差别你了解吗?

骨灰级科普-Oracle中的NULL,神马也不是

SQL也可以不那么简单

文章转载自InDataBase,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论