日期:2014-05-17  浏览次数:20770 次

请教如何控制存储过程中insert次数?
写一个存储过程
内容是按月插入过去一年的每天的数据
数据得一天一天插
问题来了
insert into table_February (ID,data_date,prp_r)
select id,to_date('20120201','yyyymmdd'),prp_r from  table_name 
;
insert into table_February (ID,data_date,prp_r)
select id,to_date('20120202','yyyymmdd'),(prp_r+1)prp_r from  table_name 
;
insert into table_February (ID,data_date,prp_r)
select id,to_date('20120203','yyyymmdd'),(prp_r+2)prp_r from  table_name 
;
......
由于每个月的天数不一样
只能根据每月的实际天数修改过程后在跑过程,十分不便。

有没有其他方法写过程
比如通过某个变量来控制insert执行的次数
------最佳解决方案--------------------
不用修改啊,你可以直接得到每个月的天数,然后根据这个值循环就行了。
另外,可以一次性插入一个月的数据,没必要每天写一条。
尝试执行下面两句sql,看懂结果就明白了

select rownum from dual 
connect by rownum <= to_number(to_char(last_day(sysdate),'DD'))

 insert into a
 select rownum,'201202'
------其他解决方案--------------------
先用
 ym varchar2(10);
 ym:=to_char(trunc(sysdate),'yyyy-mm');
select to_date(ym, 'yyyy-mm') + rownum - 1
  from dual
connect by rownum <= (last_day(to_date(ym, 'yyyy-mm')) -
           to_date(ym, 'yyyy-mm') + 1);
算出当月的天数,然后执行你的insert方案