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。

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

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

4

2 回答 2

3

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

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

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

于 2012-04-20T07:35:00.943 回答
1

主键约束是唯一键约束加上非空约束。所以它确保它下面的列是强制性的。因此,您可以愉快地删除 NVL。

问候,
罗布。

于 2012-04-20T07:33:45.710 回答