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

Oracle中的分页

2015-07-12 11:08 429 查看
完成分页存储过程, 要求,请大家编写一个存储过程,要求可以

输入表名、每页显示记录数、当前页,排序字段(dept降序)。返回总记录数,总页数,和返回的结果集.

--创建包,为游标类型
create or replace package mypackage as
type my_cursor is ref cursor;
end mypackage;

--存储过程
create or replace procedure fenye (
tablename in varchar2,
thecount in number, --thecount表示每页的条数
nowpage in number,--nowpage表示表示当前页
allnumber out number, --总记录数
allpage out number, --总页数
P_cur out mypackage.my_cursor) is
--定义sql语句(字符串)
v_sql varchar2(1000);
v_begin number:=(nowpage-1)*thecount+1;
v_end number:=nowpage*thecount;
begin
v_sql:='select * from (select t1.*,rownum rn from(select * from '||tablename||' order by sal) t1 where rn<='||v_end||') t2 where rn>='||v_begin||'';
--把游标跟sql关联
open P_cur for v_sql;
--计算allnumber和allpage
v_sql:='select count(*) from '||tablename||''; --组织一个sql语句
execute immediate v_sql into allnumber; --执行sql语句,并把返回的值赋给allnumber
--计算allpage
if mod(allnumber,thecount)=0 then
allpage:=allnumber/thecount;
else
allpage:=allnumber/thecount+1;
end if;
--关闭游标
close P_cur;
end;

--Java调用
import java.sql.*;
//测试分页
pulbic class Test{
public static void main(String[] arge){
try{
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:数据库名称","SCOTT","lipeng");
//看看如何调用有返回值的过程
//2.创建CallableStatement(调用存储过程的)
CallableStatement cs=ct.prepareCall("{call fenye(?,?,?,?,?,?)}");
//3.给???赋值
cs.setString(1,"emp");
cs.setInt(2,5);
cs.setInt(3,1);

//注册总记录数
cs.rejisterOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);
//注册总页数
cs.rejisterOutParameter(5,oracle.jdbc.OracleTypes.INTEGER);
//注册返回的结果集
cs.rejisterOutParameter(6,oracle.jdbc.OracleTypes.CURSOR);
//执行
cs.execute();
//取出总记录数/这里要注意:getInt(4)中4是由该参数的位置决定的
int rowNum=cs.getInt(4);
int pageCount=cs.getInt(5);
//得到结果集
ResulteSet rs=(ResultSet)cs.getObject(6);
//显示记录和结果集
System.out.println("rowNum="+rowNum+"pageCount="+pageCount);
while(rs.next()){
//结果集中的getInt(1)中的1表示参数在结果集中的位置
System.out.println(rs.getInt(1)+rs.getString(2));
}
}catch(Exception e){
e.printStackTrace();
} finally{

//关闭各种打开资源

}

}

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