求助!!Oracle里如何判断NULL?

wxylvmnn 2012-09-13 03:21:33
如果用到where语句里是
where 字段A is null这样的形式,
这样是OK的。

但,写在存储过程的 判断语句里时,该如何写呢?

代码里有 if 字段A = 字段B then 的逻辑,

但当字段A或者B都是NULL的时候,这个判断就失效了。
...全文
1965 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jsshizhanab 2014-01-05
  • 打赏
  • 举报
回复
NULL是不存在 两个NULL比较应该也是FALSE吧
wxylvmnn 2012-09-18
  • 打赏
  • 举报
回复
谢谢大家热心回帖哈。
找到了一个function能够实现等于和不等于的判断,跟大家共有下。

FUNCTION ISEQUAL
(
VAR1 IN VARCHAR2,
VAR2 IN VARCHAR2
)
RETURN NUMBER IS
BEGIN
IF (VAR1 IS NULL AND VAR2 IS NULL OR VAR1 IS NOT NULL AND VAR2 IS NOT NULL AND VAR1 = VAR2) THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END ISEQUAL;
jdsnhan 2012-09-14
  • 打赏
  • 举报
回复
你可以nvl(A,'0') = NVL(B,'0'). ''这个也是空
mosquito_lover1 2012-09-14
  • 打赏
  • 举报
回复
NULL不能拿来比较=or<>
陈字文 2012-09-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
SQL code


--还有应是变量吧,字段你哪可以if then
if nvl(A,'')=nvl(B,'') then
[/Quote]

++
fw0124 2012-09-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
如果是等号判断,这么写应该可以。

但是要是 不等号 的话,应该怎么写呢?
[/Quote]
总之一句话,,除了IS NULL、IS NOT NULL以外,对NULL的任何操作的结果还是NULL。
对于NULL的情况,单独考虑就是了。
fw0124 2012-09-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
如果是等号判断,这么写应该可以。

但是要是 不等号 的话,应该怎么写呢?
[/Quote]
总之一句话,,除了IS NULL、IS NOT NULL以外,对NULL的任何操作的结果还是NULL。
对于NULL的情况,单独考虑就是了。
wxylvmnn 2012-09-13
  • 打赏
  • 举报
回复
如果是等号判断,这么写应该可以。

但是要是 不等号 的话,应该怎么写呢?
fw0124 2012-09-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
如果用到where语句里是
where 字段A is null这样的形式,
这样是OK的。

但,写在存储过程的 判断语句里时,该如何写呢?

代码里有 if 字段A = 字段B then 的逻辑,

但当字段A或者B都是NULL的时候,这个判断就失效了。
[/Quote]
是的,oracle就是这样处理null的。
请参考http://blog.csdn.net/fw0124/article/details/6210730

如果需要a,b都是null的时候判断相等,可以这样
a is null and b is null
wxylvmnn 2012-09-13
  • 打赏
  • 举报
回复
写0不行啊,,,0是有数据的意思了。。。


TO:zhangandli

你看这样写,不好用的。

BEGIN
IF NVL(NULL,'') = NVL(NULL,'') THEN
dbms_output.put_line('YES');
ELSE
dbms_output.put_line('NO');
END IF;
END;
Alex20150716 2012-09-13
  • 打赏
  • 举报
回复
用length()函数判断
wxylvmnn 2012-09-13
  • 打赏
  • 举报
回复
试过了,这样写不好用啊。。。
貌似NULL和''的效果是一样的啊。。
iqlife 2012-09-13
  • 打赏
  • 举报
回复
字段A = 字段B 都是NULL会失效么,没有遇到过

这样写就避免了,
nvl(字段A,0) = nvl(字段B,0)
人生无悔 2012-09-13
  • 打赏
  • 举报
回复

--还有应是变量吧,字段你哪可以if then
if nvl(A,'')=nvl(B,'') then

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧