使用oracle存储过程编写分页

来源:互联网 发布:arguest .js 编辑:程序博客网 时间:2024/05/10 07:13

编写一个存储过程,要求可以输入表名,每页显示记录数,当前页。返回总记录数,总页数和返回的结果集。并按工资排序输出。

第一步:建立一个包并声明一个游标

create  or replace  package  pagingPackage  as 

type  paging_cursor  is  ref cursor

end  pagingPackage

 

第二步:编写分页的过程

create  procedure  paging 

(tableName   in  varchar2 ,--表名 

pageSizes    in   number,--每页显示记录数 

pageNow      in  number,--当前页 

rowNums   out  number,--总记录数 

pageNum   out   number,--总页数 

paging_curs  or   out pagingPackage.paging_cursoris  

--定义部分 

--定义sql语句,字符串 

v_sql   varchar2(1000); 

--定义两个整数,用于表示每页的开始和结束记录数 

v_begin   number:=(pageNow-1)*pageSizes+1

v_end      number:=pageNow*pageSizes

begin 

 --执行部分 

v_sql:='select * from(select t1.*,rownum rn from (select * from '||tableName||') t1 where rownum<='||v_end||') where rn>='||v_begin

--把游标和sql语句关联 

open   paging_curor for v_sql

--计算rowNumspageNum 

--组织一个sql语句 

v_sql:='select  count(*)   from '||tableName

--执行该sql语句,并赋给rowNums 

execute  immediate v_sql  into rowNums

--计算pageNum 

if    mod(rowNums,pageSizes)=0  then 

pageNum :=rowNums/pageSizes

else 

pageNum :=rowNums/pageSizes+1

end    if

end

 

第三步:在java中调用

 

package com.conn;

//jdbc 方式

import java.sql.*;

publicclass conn

{

publicstaticvoid main(String[]args)

{

//1、加载驱动

   try {

      Class.forName("oracle.jdbc.driver.OracleDriver");

          //2、得到连接

Connectionct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL","scott","wjq");

        //创建CallableStatement,专门用于调用存储过程

CallableStatement cs=ct.prepareCall("{call paging(?,?,?,?,?,?)}");

         //给问号赋值

           cs.setString(1,"emp");

           cs.setInt(2,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 myrows=cs.getInt(4);

          int mypagecount=cs.getInt(5);

          ResultSet rs=(ResultSet)cs.getObject(6);

          //输出返回值

          System.out.println("rownum:"+myrows);

          System.out.println("总页数"+mypagecount);

           while(rs.next()){

System.out.println("编号是:"+rs.getInt(1)+""+'\t'+"姓名:"+rs.getString(2)+""+'\t'+rs.getDouble(6));      }catch(Exception e)

        {

           e.printStackTrace();

        }finally{

        //关闭打开的资源   

   }

}


执行结果:


       

0 0