为什么 = NULL 在 Oracle 中不起作用?

Laz*_*zer 6 null oracle oracle-11g-r2

我最近意识到我们需要使用一种特殊的语法IS NULL来将文字与 NULL 进行比较。

为什么= NULL在这里不起作用?

Nic*_*mas 13

看看PSOUG 关于 NULL 的注释。正如 Fabricio Araujo 所暗示的,NULL 并不是真正的值,如数字 4 或字符串“培根条”。事实上,NULL在 SQL 语言中是无类型的,这就是为什么您不能在相等比较中有效地使用它的原因。您需要特殊IS [NOT] NULL语法来检查值是否为 NULL。

  • @Jack - 实际上,粗略看一下 [SQL-92 标准的这篇帖子](http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt),第 4.1 节指出:“空值是一种依赖于实现的特殊值,它不同于关联数据类型的所有非空值。实际上只有一个空值,并且该值是每种 SQL 数据类型的成员。” 我会说“无类型”是“是每种数据类型的成员”的一个很好的总结。:) (3认同)
  • @Nick - 我认为 orafaq 链接在声明 `null` 是“无类型”时具有误导性。考虑以下不同的结果类型:`select decode('A','B',to_char(null),'A','1') from dual;` 和 `select decode('A','B' ,to_number(null),'A','1') 从双;` (2认同)

Fab*_*ujo 5

在 SQL Server 中,我们有一个连接设置来获得=NULLIS NULL. 但在最新版本中不再推荐 - 它甚至被标记为已弃用。

推荐的是SQL标准方式——IS [NOT] NULL操作符。

(而且我不会在这里开始一场战争,无论'NULL是一个值还是一个状态')......呵呵呵呵