您的位置:首页 > 数据库 > Oracle

Oracle 分页

2013-10-16 20:22 204 查看
问题:编写一个存储过程,要求可以输入表名,每页显示记录数,当前页,返回总记录数,总页数,和返回的结果集

--开始编写分页的过程

--首先创建一个包

create or replace package testpackage as

type test_cursor is ref cursor;

end testpackage;

--编写过程

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 ||'';

--把游标和sql关联

open p_cursor for v_sql;

--计算myrows和mypagecount

--组织一个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 com.sw;

import java.sql.*;

/*
* oracle实现分页
*/
public class Test5 {

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","Oracle1");
//创建CallableStatement
CallableStatement cs = conn.prepareCall("{call fenye(?,?,?,?,?,?)}");

//给?赋值
cs.setString(1, "emp");
cs.setInt(2,5);
cs.setInt(3,2);

//注册总记录数
cs.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);
//注册总页数
cs.registerOutParameter(5,oracle.jdbc.OracleTypes.INTEGER);
//注册返回的结果集
cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);

//执行
cs.execute();

//取出数值或结果集,getInt(4)中的4是由参数的位置决定的
//取出总记录数
int rowCount = cs.getInt(4);
//取出总页数
int pageCount = cs.getInt(5);
//取出结果集
ResultSet rs = (ResultSet)cs.getObject(6);

//显示结果
System.out.println("总记录数:"+rowCount+"  "+"总页数: "+pageCount);

while(rs.next()){
System.out.println(rs.getInt(1)+"  "+rs.getString(2)+"  "+rs.getFloat(6));
}

} catch (Exception e) {
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: