过程名p_test
入参 aa varchar2
出参 bb sys_refcursor在SQLPLUS里如何将sys_refcursor 这个结果集获取出来呢

解决方案 »

  1.   

    create or replace procedure getEmpByDept(in_deptNo in emp.deptno%type,
     out_curEmp out SYS_REFCURSOR) as
     begin
     open out_curEmp for
     SELECT * FROM emp WHERE deptno = in_deptNo ;
     EXCEPTION
     WHEN OTHERS THEN
     RAISE_APPLICATION_ERROR(-20101,
     'Error in getEmpByDept' || SQLCODE );
     end getEmpByDept;
     
      

  2.   


    过程没问题,现在的问题是在SQLPLUS里 如何把 out_curEmp 这个结果集获取出来。
      

  3.   


    var aa varchar2(2000);
    var bb REFCURSOR;
    exec p_test(:aa,:bb);
    print bb;
      

  4.   

    1. 先定义参数
    2. 执行procedure时,传入参数
    3. print 参数
      

  5.   


    var bb REFCURSOR; --我的出参是sys_refcursor类型,定义不了
      

  6.   


    --你试过么,就说定义不了。[TEST@myoracle] SQL>create or replace procedure my_proc(
      2   i_aa varchar2,
      3   o_cursor out sys_refcursor
      4  )
      5  as
      6  begin
      7    open o_cursor for
      8     select * from tab where 1=i_aa;
      9  end;
     10  /过程已创建。[TEST@myoracle] SQL>var aa varchar2(2000);
    [TEST@myoracle] SQL>var bb refcursor;
    [TEST@myoracle] SQL>begin :aa := 1; end;
      2  /PL/SQL 过程已成功完成。[TEST@myoracle] SQL>exec my_proc(:aa,:bb);PL/SQL 过程已成功完成。[TEST@myoracle] SQL>print :bb;TNAME                          TABTYPE  CLUSTERID
    ------------------------------ ------- ----------
    TEST                           TABLE
    T1                             TABLE[TEST@myoracle] SQL>
      

  7.   

    sys_refcursor 实质就是 refcursor
    所以,你只要定义 refcursor 就可以
    你如果 var bb sys_refcursor 这肯定就报错了
      

  8.   

    pl/sql 是定义不了refcursor的
    但在sqlplus里完全可以var aa varchar2(2000);
    var bb REFCURSOR;
    exec p_test(:aa,:bb);
    print bb;另sqlplus里,
    var bb sys_refcursor;
    显示:用法: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) |
                        VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) |
                        NVARCHAR2 (n) | CLOB | NCLOB | REFCURSOR |
                        BINARY_FLOAT | BINARY_DOUBLE ] ]