Oracle定时执行存储过程之策略

     根据业务需求,需要实时展示代发工资报表数据,并且是需要纯SQL处理,不能通过程序处理,然后就需要用到定时任务和存储过程,数据在Oracle中,所以以下为PLSQL操作过程:

一.第一种情况也是最符合业务需求的方法

 1. 存储过程中调用存储过程,定时执行

  意思就是你可以先写好一个存储过程用来处理你的业务需求,然后再写一个存储过程用来定时执行之前的那个存储过程。

这样的话,比较能随着数据库里数据变化或者业务需求变化及时更改。

  以下是脚本介绍:

示例一:

create or replace procedure SP_SJBG_DAY_JOB is 
   dd varchar2(10);
   sdd varchar2(10);
   bReturn  boolean;
begin
 
   --找到表中最新数据,自然就是找到时间戳字段最大的日期喽
   select max(t.sjrq) into sdd from SJBG_DSHQ_DEMX_DAY t;
 

   --根据实际情况转换格式
   sdd := to_char(to_date(sdd,'yyyy-mm-dd')-1,'yyyy-mm-dd');


   --调用另一个存储过程的地方。sdd作为参数传进去
   SP_SJBG_DAY3(sdd);  


end SP_SJBG_DAY_JOB; 

注:以上这个脚本时 对于单个参数的情况,我的这个就是就是每天去备份前一天的数据,根据自己实际情况而定

示例二:

create  or replace procedure B_F_DFGZ_SP_JOB is 

  dd varchar2(10);
  bReturn boolean;

begin

  --在这取系统时间是一种比较偷懒的做法,没有上面一个示例中的取时好,不想偷懒的可以参考上面一个示例
  dd :=to_char(sysdate-1,'yyyy-mm-dd');
 
  --调用另外一个存储过程 参数:第①个时间 第②个boolean返回值
  b_f_dfgz_sp_init(dd,bReturn);  

end B_F_DFGZ_SP_JOB; 

附件图:

总结:以上者两种都是可以动态赋值的那种

二.按照常理来说的方法但不一定好

    1.用定时器来调用存储过程

    首先说一下用定时器调用存储过程也算是比较一种偷懒的办法,因为定时器是按照系统时间走的,如果你的数据库做变动,那么定时器可不管你三七二十一,我照常按照你设定的时间跑,其中弊端不用说了吧,你懂得。。。。

附图:

 我设置的这个定时器了就是每天凌晨00点去执行这个存储过程,关键地方在哪?

①.就是它调用存储过程时传参数的地方,定时器实际是不能都做动态传参的

②.当然也可以用系统时间比较偷懒的方式作为动态参数,这个可能就是唯一的动态参数吧?如果高手知道其他,可以在评论去@我哦,多多指教

③.通常传一个静态的参数还是可行的,效率也比较高

 

以后遇到了再慢慢补充:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉梦洛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值