java Oracle存储过程分页

原创 2006年06月12日 16:14:00

创建一个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
    WHERE rn >= ' || to_char(v_lowRownum);
    --注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn
 
    OPEN p_OutCursor FOR v_sql;
 
  end sp_Page;

end;

Java方法里调用:
.....................
      Class.forName(db_driver);
      conn = DriverManager.getConnection(db_url,db_username,db_password);
      String sql = "{ call CURSPKG.SP_PAGE(?,?,?,?,?,?)}";
      proc = conn.prepareCall(sql);
      proc.setInt(1, 10);        //每页数量
      proc.setInt(2, 2);          //页码
      proc.setString(3, "select * from test_table");      //取数据的sql
      proc.setString(4, "select count(*) from test_table");        //取数据个数的sql
      proc.registerOutParameter(5, OracleTypes.INTEGER);      //输出数据行数
      proc.registerOutParameter(6, OracleTypes.CURSOR);      //输出游标记录集
      proc.execute();
      int r = ( (OracleCallableStatement) proc).getInt(5);
      rs = ( (OracleCallableStatement) proc).getCursor(6);

      while (rs.next()) {
        System.out.println(rs.getString(1));
      }
      rs.close();     
      proc.close();
      conn.close();

关于java的分页查询操作解析(本题只针对oracle数据库的分页查询)

1.Impl层的核心代码; public List getSupplierfy(int spageno, int pageSize){ List supplierfylist = new Arra...
  • miachen520
  • miachen520
  • 2016年07月25日 07:32
  • 2117

分页的封装——java实现(基于oracle)

分页的封装,java实现,基于Oracle数据库
  • AlvinNoending
  • AlvinNoending
  • 2015年01月20日 21:33
  • 2650

Mybatis封装分页查询的java公用类(oracle)

原文地址:http://blog.csdn.net/fhadmin24/article/details/47056107 Mybatis封装分页查询的java公用类 分页----对于数据量很大的...
  • xiyang_1990
  • xiyang_1990
  • 2017年01月14日 23:08
  • 861

Oracle分页查询sql语句

1.oracle中的分页查询sql语句基本可以按照如下的模板来改写:SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FR...
  • sinat_27535209
  • sinat_27535209
  • 2016年10月25日 14:43
  • 1135

Oracle怎么实现分页

分页查询格式: SELECT * FROM  ( SELECT A.*, ROWNUM RN  FROM (SELECT * FROM TABLE_NAME) A  WHERE ROWNUM ) W...
  • zhangzeyuaaa
  • zhangzeyuaaa
  • 2016年09月25日 11:55
  • 2864

数据库分页大全及Oracle中分页详解

数据库分页大全(oracle利用解析函数row_number高效分页)   Mysql分页采用limt关键字 select * from t_order limit 5,10; #返回第6-15行数据...
  • u010708434
  • u010708434
  • 2013年12月03日 14:02
  • 3170

oracle 排序分页混乱【验证后有问题】

今天有个需求用oracle排序分页: sql如下:select *   from (select id, member_id, company_name, rownum rn           ...
  • sxhong
  • sxhong
  • 2014年01月16日 09:49
  • 1805

Oracle ROWNUM用法和分页查询总结

分页查询格式1 在查询的最外层控制分页的最小值和最大值。查询语句如下: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABL...
  • fw0124
  • fw0124
  • 2015年01月15日 13:56
  • 106274

ORACLE分页查询SQL语法——最高效的分页

--1:无ORDER BY排序的写法。(效率最高) --(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT *   FRO...
  • Honey_Potter
  • Honey_Potter
  • 2016年11月02日 22:51
  • 29304

Oracle中的SQL分页查询原理和方法详解

转载请注明出处:http://blog.csdn.net/anxpp/article/details/51534006,谢谢!     本文分析并介绍Oracle中的分页查找的方法。     Or...
  • anxpp
  • anxpp
  • 2016年05月29日 21:26
  • 29718
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java Oracle存储过程分页
举报原因:
原因补充:

(最多只允许输入30个字)