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{
//关闭各种打开资源
}
}
}
输入表名、每页显示记录数、当前页,排序字段(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{
//关闭各种打开资源
}
}
}
相关文章推荐
- Oracle-Oracle10 数据空间建立,导入,导出--oracle10g 删除步骤
- Oracle-数据实现竖排打印
- Ubuntu OracleJDK离线安装教程
- merge into在Oracle中怎么使用
- Oracle中出现了空值要与数字相加问题 怎么解决
- Oracle 11g使用Pivot函数实现数据聚合行转列
- Oracle SQL最优执行计划的依据
- 甲骨文官方文档,keytool使用方法, 要学习的看这个很全很权威;主要命令实录;
- Oracle未选定行的问题
- Oracle 高级查询
- Oracle学习个人笔记
- oracle中表被锁了怎么办
- oracle 11g ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决方法
- oracle数据库的导入dmp文件和导出dmp文件
- oracle常用到的一些应用(创建用户,用户授权)
- Oracle外键级联删除和级联更新
- Oracle-BPM(九)
- Oracle操作ORA-02289: 序列不存在 解决方案
- Oracle-BPM(八)
- ORACLE ADF Summit示例程序的一些问题