当前位置:我的异常网» Java Web开发 » ___分页存储过程中游标打开超过最大数___的有关问题
___分页存储过程中游标打开超过最大数___的有关问题
www.myexceptions.net 网友分享于:2013-12-27 浏览:26次
___分页存储过程中游标打开超过最大数___的问题
每次调用下面的分页存储过程次数多了以后就会报: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 (SELECT A.*, rownum rn
FROM ( ' || p_SqlSelect || ') A
WHERE rownum <= ' || to_char(v_heiRownum) || ') B
文章评论