环境:Oracle 10g
一开始接触的就是pascal语言,所以,有的时候不是很喜欢c语言的语法。
C语言中有一种偷懒的写法(java中也存在),大概是这样:var:=(a>=b?1:2);
我不是很喜欢这样。
但事实是,这的确可以偷懒,而且已经存在了,所以得适应它。
PL/SQL中没有这种语法,SQL中也没有,盖因为,PL/SQL是类似与PASCAL的语法,但它们有实现类似功能的函数,而关于空值的函数中就有。
1)nvl(a,b)
最经典和简单的,详细的就不说了.可以用于任何地方。SELECT子句和WHERE子句等等中。
2)lnnvl(a)
a是一个表达式
lnnvl只能用于where子句中;表达式的操作符号不能包含 AND, OR, BETWEEN。
如果a的结果是false或者是unknown,那么lnnvl返回true;如果a的结果是true,返回false.
"如果a的结果是false或者是unknown,那么lnnvl返回true",这个很重要,因为一个空值或者unknown的值和另外一个常量或者有值的变量比较的时候,返回的总是unknown,所以
lnnvl(a>10) 等价于 nvl(a,0)