请教各位大侠:
现有一存储过程 GetRoleInfo(v_RoleID integer, smenu_cur  out query_pkg.Query_cur ),存储过程有2个参数:后者为接收结果集的游标 存储过程的作用为:返回符合条件的结果记录我想在oracle中执行存储过程该如何执行?并非通过c#来接收结果集 谢谢!

解决方案 »

  1.   

    SQL> create or replace procedure test
      2     (pi_deptno IN emp.deptno%TYPE,po_result in out SYS_REFCURSOR)
      3  is
      4  begin
      5    OPEN po_result FOR
      6       SELECT empno,ename,job,sal FROM emp
      7       WHERE deptno=pi_deptno;
      8  end test;
      9  /过程已创建。SQL> var r_cur refcursor
    SQL> exec test(10,:r_cur)PL/SQL 过程已成功完成。SQL> print :r_cur     EMPNO ENAME      JOB              SAL
    ---------- ---------- --------- ----------
          7782 CLARK      MANAGER         2450
          7839 KING       PRESIDENT       5000
          7934 MILLER     CLERK           1300SQL>
      

  2.   

    楼上答案已经应该可以满足条件了,不过需要注意的就是楼上的执行方式只能在sqlplus或者sqlplusw下执行,在PL/SQL的COMMAND下执行不了,因为楼上用refcursor,很多PL/SQL不认识,可能是我的PL/SQL版本比较低吧,不过我针对我用了两个版本的PL/SQL连接同一个数据库使用其COMMAND也不好用,使用sqlplus或sqlplusw就OK了。
    楼主应该在包QUERY_PKG内部自己定义了一个游标QUERY_CUR,没有系统提供的默认动态游标,所以我就直接引用你的游标了。
    另外如果不愿意在sqlplus下去执行的话,想在PL/SQL中的SQLWINDOW中运行,可以尝试使用一下办法:
    DECLARE
      pub_cursor QUERY_PKG.QUERY_CUR;
      BEGIN
           GetRoleInfo(10,pub_cursor);
           FETCH pub_cursor INTO <info_object>;--具体写入那种类型的变量,可以自己决定。
           WHILE pub_cursor%FOUND LOOP
               FETCH pub_cursor INTO <info_object>;
           END LOOP;
           CLOSE pub_cursor;
      END;
      

  3.   

    http://blog.csdn.net/sql_xep/archive/2010/03/24/5411022.aspx