Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1702935
  • 博文数量: 136
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3261
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-22 11:26
文章分类

全部博文(136)

文章存档

2010年(1)

2009年(26)

2008年(109)

我的朋友

分类: Oracle

2008-04-11 15:11:32

刚刚在我们的程序中,又发现了NULL导致的问题。
我们的系统中的一个报表模块有问题:统计的数据和手工查询的数据不一致。程序很简单,一个select语句统计出需要的结果,再用一个insert语句将这些数据插入统计表中。问题就出在这个select语句中:

 

SELECT SUM( DECODE( JBXX.RYLB, '04', 1, 0 ) ),

       SUM( DECODE( JBXX.RYLB, '05', 1, 0 ) ),

       SUM( DECODE( JBXX.RYLB, '06', 1, 0 ) ),

       SUM( DECODE( JBXX.RYLB, '07', 1, 0 ) ),

       SUM( DECODE( JBXX.RYLB, '08', 1, 0 ) ),

       SUM( DECODE( JBXX.RYLB, '01', 1, 0 ) ),

       SUM( DECODE( JBXX.RYLB, '02', 1, 0 ) ),

       SUM( DECODE( JBXX.RYLB, '03', 1, 0 ) )

  INTO

  FROM

 WHERE

 

这个语句没问题,只是在JBXX.RYLB这个字段中,存在9条为NULL的记录。这样,每一个SUM就少计算了9条。8*9=72,统计信息中刚好少72条记录。
 
有时候,NULL值可以使得我们逻辑上正确的程序出现难以预料的问题。所以,应该小心地使用NVL函数来避免这种问题。
阅读(1339) | 评论(0) | 转发(0) |
0

上一篇:关于NULL(3)

下一篇:Oracle常用函数(1)

给主人留下些什么吧!~~