始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

Oracle分页语句介绍和编写分页的存储过程

发布时间:  2012/8/26 15:42:47

--Oracle分页语句介绍
--为每条记录编号
select t1.*,rownum rn from (select * from emp) t1;
--取出前10条记录
select t1.*,rownum rn from (select * from emp) t1 where rownum<=10;
--取出第6条到第10条记录,此语句可以作为分页的一个模板
-
 

select * from
(select t1.*,rownum rn from (select * from emp) t1 where rownum<=10)
where rn>=6;
--开始编写分页的过程
--1、先创建一个包,包中定义类型test_cursor,是个游标
create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;
--2、编写分页的存储过程
create or replace procedure fenye
(tableName in varchar2,
pageSize in number,--每页最多可以显示的记录条数
pageNow in number,--当前是第几页
myRows out number,--查询出的记录总共有多少条
myPageCount out number,--查询出的记录总共可以分多少页
p_cursor out testpackage.test_cursor--返回查询结果的记录集
) is
--定义部分
--定义sql语句
v_sql varchar2(1000);
--定义两个整数并赋值
v_begin number:=(pageNow-1)*pageSize+1;
v_end number:=pageNow*pageSize;
begin
--执行部分
--并对员工工资按由高到低排列
v_sql:='select * from (select t1.*,rownum rn from (select * from '|| tableName
 ||' order by sal) t1 where rownum<='|| v_end ||') where rn>='|| v_begin;
open p_cursor for v_sql;
--计算myRows和myPageCount
--重新给v_sql赋值
v_sql:='select count(*) from '||tableName;
--执行sql,并把返回的值付给myRows
execute immediate v_sql into myRows;
--计算myPageCount
if mod(myRows,pageSize)=0 then
myPageCount:=myRows/pageSize;
else
myPageCount:=myRows/pageSize+1;
end if;
--关闭游标
--close p_cursor;
end;

--使用java代码调用这个存储过程

package test;
import java.sql.*;
public class FenYe{
public static void main(String[] args){
try{
//加载数据库驱动
Class.forName("Oracle.jdbc.driver.OracleDriver");
//获取数据库连接
Connection conn = DriverManager.getConnection(
"jdbc:Oracle:thin:@127.0.0.1:1521:ORCL","scott","tiger");
//创建CallableStatement对象
CallableStatement cs = conn.prepareCall("{call fenye(?,?,?,?,?,?)}");
//给前三个输入参数的?赋值
cs.setString(1,"emp");//要查询的是emp表
cs.setInt(2,5);//每页显示5条记录
cs.setInt(3,1);//先显示第一页
//注册总记录数
cs.registerOutParameter(4,Oracle.jdbc.OracleTypes.INTEGER);
//注册总页数
cs.registerOutParameter(5,Oracle.jdbc.OracleTypes.INTEGER);
//注册结果集
cs.registerOutParameter(6,Oracle.jdbc.OracleTypes.CURSOR);
//执行存储过程
cs.execute();

//接收返回的总记录数
int rowNum = cs.getInt(4);
//接收返回的总页数
int pageCount = cs.getInt(5);
//接收返回的结果集
ResultSet rs = (ResultSet)cs.getObject(6);

//打印输出结果
System.out.println("总记录数:" + rowNum);
System.out.println("总页数:" + pageCount);
System.out.println("==========每页显示" +5 + "条===========");
System.out.println("==========当前是第" +1 + "页===========");
int i = 1;
while(rs.next()){
System.out.println("(" + (i++) +  ")编号:" + rs.getInt(1) + ",姓名:" + rs.getString(2) + ",  工资:" + rs.getInt(6));
}
}catch(Exception e){
e.printStackTrace();
}
}
}

需要说明的是上面的代码只是为了简单演示一下调用数据库中的分页存储过程,所以对数据库资源的连接和关闭作优化(甚至没有关闭连接,关闭结果集等)。

实际开发中是必须关闭和释放数据库资源的


本文出自:亿恩科技【www.enkj.com】

服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      0
     
     
     
     

    0371-60135900
    7*24小时客服服务热线