1.open游标之后要关闭它,中途退出的话也要保证过程结束时游标是关闭的。
   close yourcursor2.你要表达的语义我不清楚,觉得可能有问题:
   while CarNum>0 loop   
     open Driver_Cur;
     loop我觉得这句    open Driver_Cur;是不是放在while前面,不知道你要表达什么意思呵。。-----------------
这是我用循环的方式,你看有没用
  cursor cur1 is select vol_level 
                      from Proj_Cons_Dtl 
                      group by vol_level ;...
begin...
  Open cur1 ;
  fetch cur1 into Vol_Lvl ;
  
  while cur1%found loop
      null;//自己写代码
      fetch cur1 into Vol_Lvl ;
  end loop ;
  
  close cur1 ;

解决方案 »

  1.   

    create or replace procedure AoPlanCar(orderID  varchar2) is
     CarNum    numeric;
     Driver_No varchar2(30); 
    begin
       select dcQty into CarNum from rgOrder where vcOrderNo = orderID;
       declare   //错误1,这个declare是干什么的?如果是为了声明cursor,下面则需要有begin和endcursor Driver_Cur is 
          select vcDriverNo from TMDriverQueue where bCome=1 order by dtDate;   
                               //*1  begin写到这里
       while CarNum>0 loop          //不知道你这层循环是干什么的,是取多少次吗?反正我觉得每次的Driver_Cur内容都是相同的
         open Driver_Cur;
         loop
           fetch Driver_Cur into Driver_No;
           exit when Driver_Cur%notfound;
         end loop;
                              //错误2:没有关闭cursor
         CarNum := CarNum -1;
       end loop;
    end AoPlanCar;
      

  2.   

    create or replace procedure AoPlanCar(orderID in varchar2) is
     CarNum  number;
     Driver_No varchar2; 
     cursor Driver_Cur is 
     select vcDriverNo from TMDriverQueue where bCome=1 order by dtDate;
    begin
       select dcQty into CarNum from rgOrder where vcOrderNo = orderID;    
       while CarNum>0 loop   
         open Driver_Cur;
         loop
           fetch Driver_Cur into Driver_No;
           exit when Driver_Cur%notfound;
         end loop;
         CarNum := CarNum -1;
       end loop;
    end AoPlanCar;
      

  3.   

    另,To xinpingf(白开心) :
        如果我在
     while CarNum>0 loop          //不知道你这层循环是干什么的,是取多少次吗?反正我觉
    =====================
    里面删除了游标里的数据的话,会不会刷新游标啊?
      

  4.   

    游标声明位置肯定是不对游标循环建议采用for循环,简单可靠,也没有必要双重循环
    你的这个程序还有很多可以改的地方