CREATE OR REPLACE PACKAGE pkg_test
AS
   TYPE myrctype IS REF CURSOR;
END pkg_test;
/
CREATE OR REPLACE  PROCEDURE GET_STU_INFO(p_cursor out pkg_test.myrctype) as
begin
   open p_cursor for 
      'select * from stu_info';
end;
/

解决方案 »

  1.   

    只在包体定义一个游标变量,就可以使用该游标.
    TYPE myrctype IS REF CURSOR;--这条必需存在你的包头
      

  2.   

    只在包体定义一个游标变量,就可以使用该游标.
    TYPE myrctype IS REF CURSOR;--这条必需存在你的包头
      

  3.   

    只在包体定义一个游标变量,就可以使用该游标.
    TYPE myrctype IS REF CURSOR;--这条必需存在你的包头
      

  4.   

    楼上大哥:
    包体内可以定义游标变量吗?如:
     mycursor  PKG_TEST.myrctype;
    ?
    ?
    ?
      

  5.   

    out 参数是一个未初始化的变量,所以不能OPEN!只能赋值后操作!可以用 IN OUT 型解决问题。
    包中不可以定义游标变量。但可以声明游标变量类型。并可以为包中的过程函数作为参数类型去使用。!!!
    包中不可以定义游标变量,游标变量即是一个指针。若在包中定义此变量。在包外使用时。这怎么使用??这个指针指向哪?
      

  6.   

    to : beckhambobo(beckham)
    我试了一下,包体不可以定义游标变量!
    to: tfrist(tfrist) 
    CREATE OR REPLACE  PROCEDURE "SCOTT"."GET_STU_INFO"(p_cursor out comm_cursor) as
    begin
       open p_cursor for 
          select * from stu_info;
    end;
    只要我在包中实现了:comm_cursor,应该是可以open p_cursor的,因为我以前也是这样返回记录集的.
      

  7.   

    包头已定义了,无须在包体再次定义
    例子:
    CREATE OR REPLACE PACKAGE pkg_test
    AS
       TYPE myrctype IS REF CURSOR;   PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);
    END pkg_test;
    /CREATE OR REPLACE PACKAGE BODY pkg_test
    AS
       PROCEDURE get (p_id NUMBER, p_rc OUT myrctype)
       IS
          sqlstr   VARCHAR2 (500);
       BEGIN
          IF p_id = 0 THEN
             OPEN p_rc FOR
                SELECT ID, NAME, sex, address, postcode, birthday
                  FROM student;
          ELSE
             sqlstr :=
                'select id,name,sex,address,postcode,birthday
               from student where id=:w_id';
             OPEN p_rc FOR sqlstr USING p_id;
          END IF;
       END get;
    END pkg_test;
    /