数据库存储过程时间验证

问题的引出:今天看到客户有这么个需求,本来报表的数据是按天跑存储就行了,但是客户经常会发生改数据情况,改了数据后报表就不能把改后的数据展示出来。这就需要从新刷数据。但是问题是,客户所改的数据并不是昨天的数据,是这个月范围内的数据。所以就要求存储刷数据的时候刷的是当月一号截至到昨天的数据。还有一个问题是,在每个月月初的时候,客户会稽核上个月的数据,发现上个月的数据不对的情况进行更改。然后还需要重新刷数据。这就要求存储在月初的时候具备刷上个月数据的能力。最后还有一点就是数据有可能靠存储自己刷会满足不了客户的要求,这就要求用户也可以手动调用存储刷数据。

 总结以上种种情况写出以下时间验证:

startTime varchar2(19) ; --开始时间 
 endTime   varchar2(19) ;--结束时间 
 v_errorcode NUMBER; --Oracle错误代码 
 v_errortext VARCHAR(250); --Oracle错误描述 
begin
  
--处理日期格式    
       if (length(st) = 10 and length(et) = 10) then
        startTime :=st; --yyyy-mm--dd格式的数据 
        endTime :=et; 
   else
    if (length(st) = 8 and length(et) = 8) then   --yyyymmdd格式的日期 
     startTime := to_char(to_date(st, 'yyyy-mm-dd'), 'yyyy-mm-dd'); 
     endTime   := to_char(to_date(et, 'yyyy-mm-dd'), 'yyyy-mm-dd'); 
  else
    if length(st) = 8 then   --只输入开始时间,结束时间就默认为当天的前一天。 
      startTime := to_char(to_date(st, 'yyyy-mm-dd'), 'yyyy-mm-dd'); 
      if(startTime = to_char(trunc(sysdate, 'mm'), 'yyyy-mm-dd')) then  --判断开始时间是不是为一号。 
      endTime := startTime;  --如果为一号把开始时间设置为上个月的一号,结束时间为这个月的一号 
      startTime := to_char(trunc(sysdate-2,'mm'),'yyyy-mm-dd'); 
      else
      endTime   := to_char(sysdate - 1, 'yyyy-mm-dd'); 
      end if; 
    else   --判断时间点是不是在月初的第一周,第一周刷上月的数据。 
      if   to_char(trunc(sysdate-7,'mm'),'yyyy-mm-dd')<>to_char(trunc(sysdate,'mm'),'yyyy-mm-dd') 
      then
        startTime := to_char(trunc(sysdate-7,'mm'),'yyyy-mm-dd'); 
        endTime   := to_char(last_day(trunc(sysdate - 1, 'dd')),'yyyy-mm-dd'); 
    else  --如果不输入时间,默认为当月的第一天到当天的前一天。 
      startTime := to_char(trunc(sysdate, 'mm'), 'yyyy-mm-dd'); 
      endTime   := to_char(sysdate - 1, 'yyyy-mm-dd'); 
      end if; 
    end if; 
  end if; 
  end if; 

 

posted on 2015-01-24 17:52  metmetyou  阅读(831)  评论(0)    收藏  举报

导航