本帖最后由 dm520 于 2011-03-29 16:48:29 编辑

解决方案 »

  1.   

    原来是这样的 cur_emp.Extend();
    cur_emp(x) :=record_dm('','');
      

  2.   

    SELECT id ,name into cur_emp(x).id,cur_emp(x).md5value FROM dm2 where id=p_id_array(x) order by id;
    改成SELECT record_dm(id ,name) into cur_emp FROM dm2 where id=p_id_array(x) order by id;
      

  3.   

    我发现原来查询10w条数据要18s
    改成
    SELECT record_dm(id ,name) into cur_emp FROM dm2 where id=p_id_array(x) order by id;后要22秒了。
      

  4.   

    create or replace type EMPARRAY_DM is table of  VARCHAR2(200);---------------------------------------------------
    create or replace
    FUNCTION "GETROWMD5" (
    p_id_array EMPARRAY--数组
      ) 
     return SYS_REFCURSOR
    IS
     cur_emp SYS_REFCURSOR;--返回游标
    BEGIN open cur_emp for  SELECT id ,name FROM dm2 where id in (select * from table(p_id_array)) order by id;
      RETURN cur_emp;
    END;里面的sql语句上用到了in。 由于in的效率不高,有人说EXISTS可以替换in,且效率比in高, 怎么实现替换
    主要是传入的参数是 一个自定义数组 p_id_array, 如何修改?