个人怀疑是for循环的问题,不知道能不能这么写!

解决方案 »

  1.   

     close tbvoice; 
    没有的,贴错了。
      

  2.   

    在for循环中end if前加COMMIT;
      

  3.   

    业务逻辑问题,
    不妨在
    for c_s in tbvoice loop 
            if d_user_completed < d_user_sum then 
              ------------------如果已经分配量小于该分配量则分配该录音 
              update ck_voice_table 
                set who_do = v_s.user_id 
              where voice_no = c_s.voice_no; 
              d_user_completed := d_user_completed + c_s.voice_length; 
            end if; 
          end loop; 中加入一些打印语句看看,我感觉是程序的执行结果和楼主的预想结果不一致。
      

  4.   

    少了哪些数据,只能你自己加一下打印语句查一下了。
    for c_s in tbvoice loop 
            if d_user_completed < d_user_sum then 
              ------------------如果已经分配量小于该分配量则分配该录音 
              update ck_voice_table 
                set who_do = v_s.user_id 
              where voice_no = c_s.voice_no; 
              d_user_completed := d_user_completed + c_s.voice_length; 
            end if; 
          end loop;
    体下建议
    应该把loop放到if里,不然效率太低