工作中,遇到了如下需求,有一个存储过程,通过配置的Job任务每天刷数据,后来发现,存储过程逻辑错误,需要重新刷数据,即:需要把20170701到20180131的数据重新跑一遍。即把20170701-20180131的所有日期重新作为参数传入到我的存储过程中pro_kf_dp_hot_up_map。
首先的想法,是一个一个的通过测试,传入日期,穿了两天的感觉这样做太蠢了。原因如下:
- 一来,同样的重复操作,肯定可以通过程序实现;
- 二来,我需要时刻盯着是否在上一个日期的存储过程已经执行完;
- 三来,由于人为的操作时间的不连续性,我无法立刻执行下一个。
最终的解决方法是再写一个存储过程,通过循环loop,一次性执行完。如下:
create or replace procedure pro_call_pro --pro_kf_dp_hot_up_map
is
v_date int;
begin
v_date := '20180131';
while (v_date >= '20170701') loop
pro_kf_dp_hot_up_map(v_date);
dbms_output.put_line(v_date);
v_date := to_char(to_date(v_date,'YYYYMMDD')-1,'YYYYMMDD');
end loop;
end;
特将此过程记录下来,一来防止遗忘,二来,提供一个解决普遍问题的思路:能偷懒的就偷懒。����