日期:2014-05-18  浏览次数:20679 次

___分页存储过程中游标打开超过最大数___的问题
每次调用下面的分页存储过程次数多了以后就会报:java.sql.SQLException:   ORA-01000:   超出打开游标的最大数

看了一下应该是这一句:OPEN   p_OutCursor   FOR   v_sql;  
游标打开了以后没有及时关闭,但是p_OutCursor游标是作为存储过程的输出参数返回记录集的:p_OutCursor   out   refCursorType   ,在存储过程内是不能关闭的,那应该在哪里关闭这个游标呢???

**********************************************

--创建分页package:

create   or   replace   package   CURSPKG   as

    TYPE   refCursorType   IS   REF   CURSOR;

    procedure   sp_Page
    (
                p_PageSize               int, --每页记录数
                p_PageNo                   int, --当前页码,从   1   开始
                p_SqlSelect             varchar2, --查询语句,含排序部分
                p_SqlCount               varchar2, --获取记录总数的查询语句
                p_OutRecordCount   out   int, --返回总记录数
                p_OutCursor             out   refCursorType
      );

end;
/

--创建分页package   body:
create   or   replace   package   body   CURSPKG   is

    procedure   sp_Page
    (
                p_PageSize               int, --每页记录数
                p_PageNo                   int, --当前页码,从   1   开始
                p_SqlSelect             varchar2, --查询语句,含排序部分
                p_SqlCount               varchar2, --获取记录总数的查询语句
                p_OutRecordCount   out   int, --返回总记录数
                p_OutCursor             out   refCursorType
      )
      is

        v_sql               varchar2(3000);
        v_count           int;
        v_heiRownum   int;
        v_lowRownum   int;

    begin
        ----取记录总数
        execute   immediate   p_SqlCount   into   v_count;
        p_OutRecordCount   :=   v_count;

        ----执行分页查询
        v_heiRownum   :=   p_PageNo   *   p_PageSize;
        v_lowRownum   :=   v_heiRownum   -   p_PageSize   +   1;
   
        v_sql   :=   'SELECT   *   FROM &