日期:2014-05-17  浏览次数:20754 次

对查询结果可能为空的表的统计处理
在某条件下的表的某项求和,为了避免no data found exception,我一般都会先查一下是否存在记录:
select count(*)
into c
from t1
where t1.xx = '22012';

然后再求和:
if c > 0 then
select sum(t1.op)
into s
from t1
where t1.xx = '22012';
end if;

但如果t1是具有2亿多行的表,那么两次查询就不太必要了,是否可以一次完成?

此前看到有人提到用exception when ...处理,但Oracle的exception 只能写在存储过程的后部,要用exception 会对存储过程有很大的改动,而且还有其它表也需要作同样处理。

那么请问大家是如何处理的呢?

------解决方案--------------------
一 'no data found exception',这个例外是用在select .. into ..时的,当select 没有值时,会报这个例外
二 按照我的理解,你完全没有必要用select ..into..语句
  case when   t1.xx = '22012' then sum(t1.op)
    else 0 end


------解决方案--------------------
select sum(xxx) from ttt 如果没有group by,它永远不会报no_data_found,最多需要加个nvl函数
select sum(xxx) from ttt group by yyy 这个可能报错,一个最简单的decode就完事了。
------解决方案--------------------
相较之下 还是decode函数比较靠谱 性能也可以