传入两个参数:表名和日期字段名,要找出日期字段不连续的部分,并用前一条纪录填充以增加记录(日期字段不断加1,其他字段复制)进行补缺。从而生成一张日期连续递增不空缺的新表。  
日期字段是日期类型  
比如:传入参数只有表名“TableN”和日期字段名“DateA”,而实际表TableN中还包含ValueB和ValueC……等字段。而操作不变,日期字段DateA进行补充,ValueB、ValueC等字段进行复制。  
用游标又怎么实现??请教前辈。 
填充前的表TableN   
DateA                  ValueB        ValueC 
2007-1-18              1             5
2007-1-20              3             7
2007-1-25              6             3
 
填充后形成的新表:  
DateA                  ValueB        ValueC
2007-1-18              1             5
2007-1-19              1             5
2007-1-20              3             7
2007-1-21              3             7  
2007-1-22              3             7  
2007-1-23              3             7  
2007-1-24              3             7
2007-1-25              6             3

解决方案 »

  1.   

    create table tableN_new as select * from tableN where rownum=0;
    create or replace procedure p_test(tab_name in varchar2,field_name in varchar2)
    is
      v_datea NUMBER;
      v_datea_old date;
      v_datea_new date;
      v_valueb_old NUMBER;
      v_valuec_old NUMBER;
    begin
      v_datea_old:='';
      for tabN in(select datea,valueb,valuec from tablen order by datea) loop
        v_datea_new:=tabN.datea;
        if nvl(v_datea_old,'nnn')<>'nnn' AND v_datea_old+1<v_datea_new then
          v_datea:=v_datea_new-v_datea_old;
          SELECT valueb,valuec INTO v_valueb_old,v_valuec_old 
            FROM tablen WHERE datea=v_datea_old;
          FOR n IN 1..v_datea-1 LOOP
            v_datea_old:=v_datea_old+n;
            INSERT INTO tableN_new(datea,valueb,valuec)
                 VALUES(v_datea_old,v_valueb_old,v_valuec_old);
          END LOOP;
        end if;
        INSERT INTO tableN_new(datea,valueb,valuec)
             VALUES(v_datea_new,tabN.valueb,tabN.valuec);
        v_datea_old:=v_datea_new;
      end loop;
    end p_test;
      

  2.   

    不是很完全 ~~~~
    如果,还有valued、valuee等字段,就得改这个存储过程了~~~~
    有一个思路:Oracle里有记录型的变量,可以存储fetch出来的整条记录。
    如果用记录型变量记录从游标fetch出来的整行记录,保留日期,再把这条记录整条添加,并修改top 1的的时间为保留日期的后面一天,就实现了添加一条日期不存在的记录了。
    但具体得如何实现???
    请教高手...