根据业务需求,需要实时展示代发工资报表数据,并且是需要纯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点去执行这个存储过程,关键地方在哪?
①.就是它调用存储过程时传参数的地方,定时器实际是不能都做动态传参的
②.当然也可以用系统时间比较偷懒的方式作为动态参数,这个可能就是唯一的动态参数吧?如果高手知道其他,可以在评论去@我哦,多多指教
③.通常传一个静态的参数还是可行的,效率也比较高
以后遇到了再慢慢补充: