只是查看查询并注意它使用NVL(table.column, '')
,引号之间没有任何内容。
这会起到什么作用?这不等于NULL?
答案 0 :(得分:3)
是的,在oracle中编写它是不好的编程习惯。无论列值是什么,它基本上保持相同的值。如果在where子句中没有使用那些列可能包含的索引,它甚至可能会对性能造成伤害。
答案 1 :(得分:1)
在Oracle中它不会做任何事情,因为空字符串是IS NULL。 但是在其他数据库中,如果table.column wloud为NULL,则它将返回空字符串的NOT NULL值。
Here是对此行为进行更彻底解释的链接。
答案 2 :(得分:1)
在Oracle中,是的,这是一个毫无意义的表达。
但是,在大多数数据库中,它会将NULL
值转换为与NULL不同的空字符串(这里是why Oracle treats the empty string as NULL上的单独问题)。我猜想,编写查询的人都希望Oracle遵循ANSI标准,并且有问题的代码有错误,或者至少没有按照作者的意图运行。
答案 3 :(得分:0)
来自oracle文档:
NVL允许您使用查询结果中的字符串替换null(作为空白返回)。如果expr1为null,则NVL返回expr2。如果expr1不为null,则NVL返回expr1。
答案 4 :(得分:0)
此调用等同于简单字段引用(table.column)。
如果在查询的where部分使用它(这可能是优化的一部分,防止不需要的索引使用),这样的表达式可能有意义。