无法将一个游标值直接付给另一个游标,除非创建一个临时的表tmp,
V_CURSOR_A  --> tmp --> V_CURSOR_B

解决方案 »

  1.   

    V_CURSOR_A T_CURSOR;
    V_CURSOR_B T_CURSOR;
    V_CURSOR_C T_CURSOR;
    我定义个3个游标,其中V_CURSOR_A,V_CURSOR_B是通过Open for 打开的,我想把每次循环后的V_CURSOR_B赋给V_CURSOR_C,也就是说如果循环了10次数,V_CURSOR_C中纪录集就是10次V_CURSOR_B的纪录集这样不行吗?我只能每次将V_CURSOR_B中的数据放入到一个临时标中?最后用V_CURSOR_C打开那个临时表吗??
      

  2.   

    使用一个类型的数组,代替V_CURSOR_C
      

  3.   

    to lianhg(lianhg) :
        可是我最后要将V_CURSOR_C赋给一个输出参数,需要将该纪录集返回,怎麽办?
      

  4.   

    只能"每次将V_CURSOR_B中的数据放入到一个临时标中,最后用V_CURSOR_C打开那个临时表".
    其实,许可的话,可以考虑用“数组、表型变量”代替 recordset
      

  5.   

    to lianhg(lianhg):
         可问题是“数组、表型变量”能作为一个游标类型返回吗?我的那个V_CURSOR_C可是out的呀?
      

  6.   

    CREATE OR REPLACE PACKAGE pkg_test
    AS
       TYPE myrctype IS REF CURSOR;
    END pkg_test;
    /create function name_f(p_id in varchar2)
    return varchar2
    as
    str varchar2(50);
    begin
    str:='select * from table_name id='''||p_id||''' where rownum<16';
    return(str);
    end;
    /declare
    sqlstr varchar2(1000);
    cursor t_sor is
    select id from A;
    num number:=0;
    v_rc pkg_test.myrctype;
    begin
    for v_sor in t_sor loop
    if num=0 then
    sqlstr:=name_f(v_sor.id);
    num:=num+1;
    else
    sqlstr:=sqlstr||' union'||name_f(v_sor.id);
    end if;
    end loop;
    open v_rc for sqlstr;
    end;
    /
      

  7.   

    to beckhambobo(beckham) :
        哈,我太佩服了,方法真巧妙,我没试验,估计肯定没问题,先结贴了,谢谢:)