plsql里面定义了一个ref cursor动态游标变量,请问下,如何遍历取值呢?在网上看到一些例子,都是单个的,取值,没有游标遍历取值!如何实现遍历取值?

解决方案 »

  1.   

    declare
        l_cur   sys_refcursor;
        l_empno number;
    begin
        open l_cur for
            select empno from emp;    loop
            fetch l_cur
                into l_empno;
            exit when l_cur%notfound;
        
            dbms_output.put_line(l_empno);
        end loop;
    end;
      

  2.   

    declare
    type company_cursor is ref cursor;
    v_cursor company_cursor;
    company_type bmt_company%rowtype;
    v_cmpid varchar2(2000);
    v_sql varchar2(2000);
    begin
     for c1 in (select ''''||cmpid||'''' cmpid from bmt_company) loop
       v_cmpid:=v_cmpid||','||c1.cmpid;
     end loop;
      dbms_output.put_line (substr(v_cmpid,2));
     v_sql:='select * from bmt_company where cmpid in ('||substr(v_cmpid,2)||')';
     dbms_output.put_line (v_sql);
     open v_cursor for v_sql;
     loop
     fetch v_cursor into company_type;
     exit when v_cursor%notfound;
     dbms_output.put_Line(company_type.cmpshortnm);
     end loop;
     close v_cursor;
    end;
    仅供参考!
      

  3.   

    如果想一次取多值,可以只用fetch...bulk into...的方法