这是我的过程 ,传三参数,说是执行成功了就是表中无插入数据,郁闷。求高手指点一二 感激不尽
create or replace procedure qmys_out(qmysnum varchar2,
                                   rtime date,
                                   qtime date
                                   ) as
                                   cInts number;
                                    a number;
begin
  a:=months_between((to_date(to_char(qtime,'yyyymm'),'yyyymm')),(to_date(to_char(rtime,'yyyymm'),'yyyymm')));
  cInts:=0;
  IF rtime>=to_date(to_number(to_char(rtime,'yyyymm')||26),'yyyymmdd')
   then cInts:= cInts+1;
   return;
   end if;
  IF rtime>=to_date(to_number(to_char(qtime,'yyyymm')||26),'yyyymmdd')
   then a:= a+1;
   return;
   end if;
   IF rtime<to_date(to_number(to_char(rtime,'yyyymm')||26),'yyyymmdd')
   then insert into t_c_qmysz(zys_ysnum, zys_num,zys_days) values (qmysnum,
   to_char(rtime,'yyyymm'),(to_date((to_char(rtime,'yyyymm')||25),'yyyymmdd')-rtime));
    cInts:= cInts+1;
   return;
   end if;
   
  loop
  if   cInts=a
   then insert into t_c_qmysz(zys_ysnum, zys_num, zys_days) values (qmysnum,
  to_char( add_months(rtime,cInts),'yyyymm'),(qtime-(add_months(to_date((to_char(rtime,'yyyymm')||26),'yyyymmdd'),cInts-1))+1));
   cInts:= cInts+1;
  return;
  end if;
  
  insert into t_c_qmysz(zys_ysnum, zys_num, zys_days) values (qmysnum,
  to_char( add_months(rtime,cInts),'yyyymm'),(add_months(to_date((to_char(rtime,'yyyymm')||25),'yyyymmdd'),cInts))-(add_months(to_date((to_char(rtime,'yyyymm')||26),'yyyymmdd'),cInts-1))+1);
  cInts:= cInts+1;
  if cInts>a
  then exit;
  end if;
  end loop;
  
end qmys_out;

解决方案 »

  1.   

    有没有commit?经俺实地测试,如果在函数中插入数据没有commit,也是不会自动提交的
      

  2.   

    那就是没有符合条件的记录吧?你前面有好几个return,如果有一个满足就直接return了
      

  3.   

    用pl/sql developer单步调试看看
      

  4.   

    对。楼主为什么在前面加了那么多return?return会使过程终止。
    检查一下是否是这个原因
      

  5.   

    return去掉了  
    months_between 日期加/ 好了 哈哈 谢谢各位 高手 哈哈