--1、开发一个包
create or replace package testpackage as
   --创建一个包,在该包中,定义了类型test_cursor ,是一个游标
   type test_cursor is ref cursor;
end testpackage;
--2、编写过程
create or replace procedure splitPages
   (   tableName in varchar2, --表名
       pageSizes in number,    --一页显示的记录数
       pageNow in number,  --当前第几页
       pageRows out number, --总记录数
       pageCount out number, --总页数
       pageCursor out testpackage.test_cursor --返回记录集 
   ) is
  --定义部分
  --定义sql语句, 字符串
  v_sql varchar2(1000);
  --定义两个整数
  v_begin number:= (pageNow-1)*pageSizes + 1;
  v_end number:=  pageNow*pageSizes; 
  begin
    --执行部分
    v_sql:= 'select * from
          (select t.*, rownum rn from (select * from '||tableName||') t) tt
           where tt.rn between '||v_begin||' and '||v_end;
    --把游标和sql关联
    open pageCursor for v_sql;
    --计算myrows
    --组织一个sql
    v_sql:='select count(*) from '||tableName;
    --执行sql 并把返回的值 赋值给pageRows
    execute immediate v_sql into pageRows;    
    --计算pageCount
    pageCount:=(pageRows-1)/pageSizes + 1;
    --关闭游标  注意这里不能关闭游标
    --close pageCursor;
end;
/
		Class.forName("oracle.jdbc.driver.OracleDriver");
		Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "scott", "tiger");
		//调用存储过程
		CallableStatement proc = conn.prepareCall("{call splitPages(?, ?, ?, ?, ?, ?)}");
		//给输入参数传值
		proc.setString(1, "emp"); //表名
		proc.setInt(2, 3);	//一页显示的记录数
		proc.setInt(3, 1);  //当前第几页
		//声明输出参数是什么类型
		proc.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER); //总记录数
		proc.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER); //总页数 
		proc.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR); //返回记录集 
		//执行
		proc.execute();
		int pageRows = proc.getInt(4);
		int pageCount = proc.getInt(5);
		System.out.println("总行数="+pageRows);
		System.out.println("总页数="+pageCount);
		ResultSet rs = (ResultSet)proc.getObject(6);
		while(rs.next()){
			System.out.println(rs.getInt(1) +" "+rs.getString(2)+" "+rs.getString(3));
		}	
 
                     
                    
                 
                    
                 

 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号