Oracle 存储过程-实现分页 + 代码案例

 1     // 分页的操作
 2     
 3     public void pro_fenye(String tname,int pagesize,int pagenow){
 4         try {
 5             System.out.println("haha");
 6             CallableStatement cs = conn.prepareCall("{call pro_fenye(?,?,?,?,?,?)}");
 7             // 设置参数
 8                 // 输入参数设置
 9             cs.setString(1, tname);
10             cs.setInt(2, pagesize);
11             cs.setInt(3,pagenow);
12                 // 输出参数设置
13             cs.registerOutParameter(4, oracle.jdbc.OracleTypes.CURSOR);
14             cs.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER);
15             cs.registerOutParameter(6, oracle.jdbc.OracleTypes.INTEGER);
16             //执行语句
17             cs.execute();
18             rs = (ResultSet)cs.getObject(4);
19             System.out.println(rs);
20             // 获得总条数
21             System.out.println(cs.getInt(5));
22             // 获得总页数
23             System.out.println(cs.getInt(6));
24         } catch (SQLException e) {
25             // TODO Auto-generated catch block
26             e.printStackTrace();
27         }
28     }
--PLSQL代码
--使用包定义游标变量类型 create or replace package package_fenye is -- 定义游标变量 type cursor_type is ref cursor; end; -- 分页的存储过程完整版 create or replace procedure pro_fenye( -- 进入存储过程的值 v_tablename in varchar2, -- 表名 v_pagesize in number, -- 规定每一页显示的数据条数 v_pagenow in number, -- 当前需要显示的页数 -- 返回的数据 -- 当前没有游标类型,要使用包来定义游标类型 cur_data out package_fenye.cursor_type, -- 返回总页数 v_count out number, -- 返回数据表中有多少条数据 v_mypages out number --返回总共分为多少页 ) is --定义变量 -- 存储sql语句 v_sql varchar2(300); -- 数据范围 v_begin number(10):=v_pagesize*(v_pagenow-1)+1; v_end number(10):=v_pagesize*v_pagenow; begin --定义查询数据的sql语句 --查询最外范围的 v_sql:= 'select * from (select rownum rn,a.* from (select * from '||v_tablename||')a)b where rn>='||v_begin||' and rn<='||v_end; --使用游标存储数据 -- 拿到总数据 open cur_data for v_sql; v_sql:='select count(*) from '||v_tablename; --执行sql语句,返回结果 --拿到总数据条数 execute immediate v_sql into v_count; -- 获得总页数 if mod(v_count,v_pagesize)= 0 then --计算总页数 v_mypages:=v_count/v_pagesize; else v_mypages:=v_count/v_pagesize+1; end if; end;

 

posted @ 2016-07-07 10:16  HuberyQian  阅读(538)  评论(0编辑  收藏  举报