ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于NVL函数的一个细节问题

关于NVL函数的一个细节问题

原创 Linux操作系统 作者:xilangxiangwa 时间:2008-07-24 09:52:54 0 删除 编辑

关于NVL函数的一个细节问题

一、准备工作:创建一个表并插入测试数据

SQL>  create table t0720 (a VARCHAR2(2) ,

  2                   b NUMBER(12,2)

  3           )

  4  /

表已创建

 

SQL> INSERT INTO t0720 VALUES ('B',NULL)

  2  /

已创建一行

 

SQL> COMMIT

  2  /

提交完成

 

SQL> SELECT * FROM t0720

  2  /

A          B

-- ---------

B

 

SQL>

 

二、一个问题

SELECT NVL(B,0)  FROM t0720 WHERE a = 'B' 与

SELECT NVL(B,0)  FROM t0720 WHERE a = 'X' 的返回值是否都为零?

回答是否定的。语句执行结果如下:

 

SQL> SELECT NVL(B,0)  FROM t0720 WHERE a = 'B'

  2  /

 

 NVL(B,0)

---------

        0

 

SQL> SELECT NVL(B,0)  FROM t0720 WHERE a = 'X'

  2  /

 

未选定行

 

三、结论

    在SQL中使用NVL函数时,若根本就没有满足条件的数据记录返回时,NVL将不进行处理,或者说此时根本无数据可供NVL函数处理。

 

 

四、应用举例

    SQL> SELECT   SUM(NVL(B,0))   FROM   t0720   WHERE   a   =   'X'

    2  /

    /*由于无满足条件的数据返回,NVL未做处理。故返回NULL值*/

SUM(NVL(B,0))

-------------

 

 

SQL> SELECT   NVL(SUM(B) ,0)   FROM t0720   WHERE   a   =   'X'

  2  /

/*虽然根据查询条件无满足条件的数据返回,但根据SUM函数的特点

最终将返回NULL值,而此值被NVL函数捕获并被处理,故返回0值。*/

NVL(SUM(B),0)

-------------

    0

 

SQL>

小结:若想达到无数据则SUM返回0值的目的,则应把NVL放在外层而不是里层。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10595277/viewspace-408736/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-01-18

  • 博文量
    71
  • 访问量
    411422