各位大虾:
   我需要在一张表里把用户信息读出来,然后根据用户号分别计算他们的酬金。酬金计算已经在一个函数(f_count_bonus)实现了。我的存储过程是这么处理的:
    open mc for
   'select user_id from t_user where state in (3,4)';
  loop
    fetch mc into v_uid;
  exit when mc%NOTFOUND;
    bonus:=bonus+f_count_bonus(v_uid);
  end loop;
  close mc;我这样通过游标循环来达到目的,这样效率不是很高,特别在读出纪录很多的情况下。
请问:这里不用游标还能用什么来提高效率??先谢了

解决方案 »

  1.   

    select user_id,sum(salary) from t_user where state in (3,4) group by user_id是不是这个意思
      

  2.   

    不是这个意思
    我需要把t_user表里满足条件(state in (3,4))的用户逐一求酬金,如果我不用游标来循环读,我还可以通过什么方式来达到目的?
      

  3.   

    update t_user set salary = salary + f_count_bonus(user_id );
    是不是这个意思
      

  4.   

    update t_user set salary = salary + f_count_bonus(user_id ) where state in (3,4);
      

  5.   

    也误解了
    酬金不是t_user的一个字段,而是需要计算每个人的bonus,相加后返回给函数
    酬金计算的函数已经有了
    我的意思:对于这样需要逐个读出纪录的需求有没有效率高些的方法?
      

  6.   

    这个?select sum(f_count_bonus(user_id ))
    into xxx
    from t_user
    where state in (3,4);
      

  7.   

    哈哈,这个可以去试试
    cursor的效率确实不高吗?
      

  8.   

    to AFIC(A Foolish In China):
        请问这样可以提高效率吗?
      

  9.   

    能写成单句sql当然单个sql的效率要避cursor高啊。
      

  10.   

    OracleDBA群35903017,欢迎加入。