oracle存储过程分页

Code:
  1. create or replace package fenyebao as --包  
  2. type f_cursor is ref cursor;  
  3. end fenyebao;  
  4. create or replace procedure fenye  
  5. (tablename in varchar2,  
  6. pagesize1 in number,  
  7. pagenow in number,  
  8. myrows out number,--总数  
  9. mypagecount out number,--总页数  
  10. p_cursor out fenyebao.f_cursor--返回的记录集  
  11. )  
  12. is  
  13. v_sql varchar2(1000);  
  14. v_begin number:=(pagenow-1)*pagesize1+1;  
  15. v_end number:=pagenow*pagesize1;  
  16. begin  
  17. v_sql:='select * from (select t1.*,rownum rn from (select * from '||tablename  
  18. ||')t1 where rownum<'||v_end||') where rn>'||v_begin;  
  19. --把游标和sql关联  
  20. open p_cursor for v_sql;  
  21. v_sql:='select count(*) from '||tablename;  
  22. execute immediate v_sql into myrows;--执行sql并把返回值赋给myrows  
  23. if mod(myrows,pagesize1)=0 then  
  24. mypagecount:=myrows/pagesize1;  
  25. else  
  26. mypagecount:=myrows/pagesize1+1;  
  27. end if;  
  28. end;  
Code:
  1. import java.sql.*;  
  2.   
  3. public class fenye {  
  4.     public static void main(String[] args)throws Exception{  
  5.         Class.forName("oracle.jdbc.driver.OracleDriver");  
  6.         Connection con = null;  
  7.         con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","hr","hr");  
  8.         CallableStatement cst = con.prepareCall("{call fenye(?,?,?,?,?,?)}");  
  9.         cst.setString(1"employees");  
  10.         cst.setInt(25);  
  11.         cst.setInt(32);  
  12.         cst.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER);  
  13.         cst.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER);  
  14.         cst.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);  
  15.         cst.execute();  
  16.         int rownum = cst.getInt(4);  
  17.         int pageCount = cst.getInt(5);  
  18.         ResultSet rs = (ResultSet)cst.getObject(6);  
  19.         System.out.println(rownum);  
  20.         System.out.println(pageCount);  
  21.         while(rs.next()){  
  22.             System.out.println("姓名:"+rs.getString(2)+" email:"+rs.getString(3));  
  23.         }  
  24.     }  
  25.   
  26. }  
 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值