Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
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 可以为空吗?(我知道这没有意义,但我不得不问)
您的 nvl 函数所做的是将 B.SEQID 中遇到的所有空值替换为 A.LVL5_ID 的值。
声明 B.SEQID 是主键会使此 NVL 在您的查询中无用,因为主键永远不能包含空值。但是,唯一键当然可以包含多个空值。
如果 where 子句没有任何匹配项,它将不会返回空值,而是返回“未选择行”,这是一条反馈消息。
主键约束是唯一键约束加上非空约束。所以它确保它下面的列是强制性的。因此,您可以愉快地删除 NVL。
问候, 罗布。