您的位置:首页 > 数据库 > Oracle

最近oracle开发中遇到的一些问题及解决办法(一)待续

2008-01-10 17:39 656 查看
最近开发中遇到了很多问题,现在总结下来:

1.查询汇总是发现的一个问题:

select distinct(narrivmny) from fact_receivable //有值

select distinct(ninmny) from fact_receivable //有值

select sum(a.ninmny-a.narrivmny) from fact_receivable a 空

到底什么原因呢,一切都是NULL惹的祸!

处理办法:select sum(NVL(a.ninmny,0)-NVL(a.narrivmny,0)) from fact_receivable a

测试:

select nvl(3,0)-nvl( null,0) from dual

2.关于取两个日期间隔天数计算问题.floor(mixdate-to_date(a.djrq,'yyyy-mm-dd')):注意返回的是NUMBER类型,因此数据库

表中字段要设计成NUMBER类型.

关于计算今天是今年第几周:select get_week(to_char(sysdate,'yyyy-mm-dd')) from dual;

3.关于循环插入的一个存储过程:create or replace procedure receivablezl
as
mixdate date;

begin
EXECUTE IMMEDIATE 'truncate table xgck.fact_receivablezl';
mixdate:=sysdate-60;
loop
insert
into
fact_receivablezl(
pk_corp,custname,ninmny,date_desc,nninmny,days,ardate)
select * from (select a.pk_corp,d.custname,sum(a.ninmny),a.djrq,sum(a.nintaxmny-a.narrivmny),floor(mixdate-to_date(a.djrq,'yyyy-mm-dd')),to_char(mixdate,'YYYY-MM-DD')
from fact_receivable a,dim_bd_cubasdoc d,dim_bd_cumandoc e
where
a.pk_cumandoc = e.pk_cumandoc
and
e.pk_cubasdoc = d.pk_cubasdoc
and
a.djrq<to_char(mixdate,'YYYY-MM-DD')
group by a.pk_corp,d.custname,a.djrq,floor(mixdate-to_date(a.djrq,'yyyy-mm-dd'))
)
;
commit;
mixdate:= mixdate+1;
exit when to_char(mixdate,'YYYY-MM-DD')=to_char(sysdate,'YYYY-MM-DD');
end loop;
delete from fact_receivablezl where ninmny=0;
end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐