我在循环中要向数据表epare_crewisview插入4条记录,但是每次总是插入5条,而且4、5两条记录是一样的,这是怎么回事啊
create or replace package body MYPREPARENEW is
  procedure addCrewBoard1(v_tsk in varchar2, v_userId in varchar2, v_userName in varchar2, v_content in varchar2)
  is
  CURSOR receiver(tskID VARCHAR2) IS SELECT epc.username FROM epare_crewschedule epc where epc.tsk=tskID;
  v_tmpname varchar2(80);            
  v_id int;  
  begin 
    select crewboardseq.nextval into v_id from dual; 
    insert into epare_crewboard(id, tsk, userid, username, content) values(v_id, v_tsk, v_userId, v_userName, v_content); 
    
    begin
    open receiver(v_tsk);
    LOOP
    fetch receiver into v_tmpname;
    if(v_tmpname=v_userName)then
      insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)values(v_id, v_tsk, v_userName, v_tmpname,1);
    else
       insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)values(v_id, v_tsk, v_userName, v_tmpname,0);     
    end if;
    exit when receiver%NOTFOUND;
    end loop;
    close receiver;
    end;
  end; 
end MYPREPARENEW;

解决方案 »

  1.   

     LOOP 
        fetch receiver into v_tmpname; 
        exit when receiver%NOTFOUND; 
        if(v_tmpname=v_userName)then 
          insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)values(v_id, v_tsk, v_userName, v_tmpname,1); 
        else 
          insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)values(v_id, v_tsk, v_userName, v_tmpname,0);    
        end if; 
        
        end loop; 
      

  2.   

    谢谢 沦落街头 我是初级菜鸟,我以为那个exit when receiver%NOTFOUND; 
    是这种循环方式的必须的格式呢,原来他也可以来回移动哦,谢谢