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

如何让ORACLE每月自动更新一个表的数据?
如何让ORACLE每月自动更新一个表的数据?
现在每月手动更改的SQL语句如下:

delete from fdxs_month;
commit;
/

insert into fdxs_month (goodsid,goodsqty)
  select a.goodsid,round(sum(a.goodsqty),0) goodsqty
  from resa_sa_dtl a,resa_sa_doc b
  where a.rsaid = b.rsaid 
  and b.useday between to_date ('20100201','yyyymmdd')
  and to_date ('20100228','yyyymmdd')
  group by a.goodsid;

commit;
/

------解决方案--------------------
1 写个存储过程,用job定时执行。


另:

delete from fdxs_month;
commit;
/

改为直接truncate,降低高水位,以防表越滚越大,影响性能。

2 用物化视图,定时刷新。
------解决方案--------------------
如果每月指定几日调一次,
可以在JOB调用的存储过程中判断是否是当月指定日期
如果是则执行数据处理
如每月1日: 
if to_char(sysdate,'dd')='01' then
insert into ....
end if;
然后设置一个每天调用一次的JOB
------解决方案--------------------
JOB每月1号1点执行一次:

SQL code

begin
  sys.dbms_job.submit(job => :job,
                      what => '更新数据的存储过程名',
                      next_date => sysdate,
                      interval => 'TRUNC(LAST_DAY(SYSDATE))+1+1/24');
  commit;
end;
/