PLSQL分頁

--PLSQL分頁過程
create or replace procedure fenye
(tableName in varchar2,  --表名
 page_size in number,   --每頁顯示記錄數
 pageNow  in number, --當前頁
 myrows  out number, -- 總記錄數
 myPageCount out number, --總頁數
 my_cursor out my_new_pack.test_cursor --返回的結果集
)is
--定義SQL語句  字符串
v_sql varchar2(1000);
v_begin number := (pageNow-1)*page_size+1;
v_end number := pageNow*page_size;
begin
 v_sql :=  'select * from (select t1.*,rownum rn from (select * from '||tableName
 ||')t1 where rownum<='||v_end||' )where rn>='||v_begin;
 open my_cursor for v_sql;
 v_sql :='select count(*) from '|| tableName;
 execute immediate v_sql into myrows;
 if mod(myrows,page_size) =0 then
 myPageCount := myrows/page_size;
 else myPageCount := myrows/page_size+1;
 end if;
end;


JAVA調用代碼:
import java.sql.*;

public class test {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Connection conn = null;
  CallableStatement cs = null;
  ResultSet rs =null;
  try{
   Class.forName("oracle.jdbc.driver.OracleDriver");
   conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:kelvin111G2","system","MANAGER");
   cs = conn.prepareCall("{call fenye(?,?,?,?,?,?)}");
   cs.setString(1, "scott.emp");
   cs.setInt(2, 5);
   cs.setInt(3, 2);
   cs.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);
   cs.registerOutParameter(5,oracle.jdbc.OracleTypes.INTEGER);
   cs.registerOutParameter(6,oracle.jdbc.OracleTypes.CURSOR);
   cs.execute();
   System.out.println("總記錄數為"+cs.getInt(4));
   System.out.println("總頁數"+cs.getInt(5));
   rs = (ResultSet)cs.getObject(6);
   while(rs.next()){
    System.out.println(rs.getInt(1)+"==="+rs.getString(2)+"==="+rs.getString(3));
   }
  
  }catch(Exception e){
   e.printStackTrace();
  }finally{
    try {
     rs.close();
     cs.close();
     conn.close();
    } catch (SQLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
  }
 
 }
}

你可能感兴趣的:(plsql)