Heim  >  Artikel  >  Datenbank  >  Oracle 空值(null)有关的函数

Oracle 空值(null)有关的函数

WBOY
WBOYOriginal
2016-06-07 16:58:521045Durchsuche

环境:Oracle 10g一开始接触的就是pascal语言,所以,有的时候不是很喜欢c语言的语法。C语言中有一种偷懒的写法(java中也存在)

环境: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)说白了,lnnvl是一种特定的用于简化表达式的函数,orcle解析的时候,应该会解析为 "a

3)nullif
开篇说了半天,PL/SQL中类似的就是这个函数。
格式: nullif(expr1,expr2) 等价于 "CASE WHEN expr1 = expr 2 THEN NULL ELSE expr1 END",
限制: expr1不能是标识符null,录入nullif(null,expr2)那么会提示错误。
           expr1,expr2 都必须是一个变量或者是一个常量表达式,不能是逻辑表达式。
4)nvl2
也是一个类似c语言格式的函数.
格式:NVL2(EXPR1,EXPR2,EXPR3)
等价于: case when expr1 is null then expr2 else expr3 end
限制: 1) expr1可以是任意类型,,expr2,expr3不能是long类型。
       2) 如果 expr2是字符类型,那么expr3转为字符型再比较(null除外)。
       3) 如果 expr2是数值类型,那么expr3也转为对应的数值类型。
       4) 各个参数都不能是逻辑表达式.

总结: 1) 各个其它函数基本可以转为为nvl,或者case when 的格式。
       2) 除了方便之外,其实只掌握nvl和case when 已经足够了
       3) 如果可以的话,偶尔用用也是可以带来些些方便。

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn