2012-04-20 132 views
3
select NVL(B.SEQID, A.LVL5_ID) LVL6_ID, NVL(B.NAME, ' ') LVL6_NAME, A.LVL5_ID 
FROM LVL5 A, ABC B WHERE A.LVL5_ID = B.LVL7 

上面的查询是在我的系统中定义了一个视图。在这里我想知道为什么使用NVL。NVL功能

问题是,SEQID是主键列,不能为空。那么这里是否需要NVL?

可以B.SEQID为空,如果没有记录满足WHERE子句可以找到?(我知道这没有道理,但我不得不问)

回答

3

你的nvl函数所做的是将它在B.SEQID中遇到的所有空值替换为A.LVL5_ID的值。

说明B.SEQID是主键使得这个NVL在你的查询中无用,因为主键不能包含空值。但是,唯一的键肯定可以包含多个空值。

如果where子句没有任何匹配,它将不会返回空值,而是返回一个“no rows selected”,这是一个反馈消息。

+0

非常感谢!说得通 – MozenRath 2012-04-20 07:52:05

1

主键约束是一个独特的键约束加上非空约束。所以它确保它下面的列是强制性的。所以你可以愉快地移除NVL。

Regards,
Rob。

+0

非常感谢!会做 – MozenRath 2012-04-20 07:52:13