如何让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;
/