NVL功能

时间:2012-04-20 07:23:16

标签: sql database oracle view nvl

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。

问题是SEQID是主键列,不能为null。所以这里有没有NVL需要?

如果找不到满足where子句的记录,那么B.SEQID可以为空吗?(我知道这没有意义,但我只是要问)

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

主键约束是唯一键约束加上非空约束。因此,它确保其下面的列是必需的。所以你可以高兴地删除NVL。

的问候,
罗布。