在PL/SQL中检查空值的正确方法是什么?

ant*_*pug 3 sql oracle plsql

IF purpose = null THEN
   v_purpose := '';
ELSE
   v_purpose := ' for ' || purpose;
END IF;
Run Code Online (Sandbox Code Playgroud)

当目的为空时,它仍然会转向其他...为什么?!

wal*_*lyk 5

正确的测试是

IF purpose IS NULL THEN
Run Code Online (Sandbox Code Playgroud)

这是因为NULL不是存储在字段中的.它是 关于存储在别处(但在行内)的字段的属性.

将字段设置为NULL普通分配,因此通过直接比较看起来完全正交以期望对其进行测试.但是,为了使它像它一样工作,我推测SQL赋值原语有一个神奇的隐藏方面,它将特殊符号的赋值转移NULL到设置属性而不是字段.


Pau*_*sik 5

NULL是SQL中的一个特殊值,无法使用相等运算符进行比较.您需要使用特殊运算符,ISIS NOT在测试时是否为NULL.

这是对这个想法的一个很好的概述.并摘录:

注意:Null在Oracle中缺少信息.可以指定null,但不能将其等同于任何内容,包括其自身.NULL值表示丢失或未知数据.NULL值不是整数,字符或任何其他特定数据类型.请注意,NULL与空数据字符串或数值"0"不同.