/* 案例:存儲過程完成分頁查詢 */ --分頁語句 :select * from (select a.*, rownum rn from (select * from emp) a where rownum <= 10) where rn >= 5; --建立一個包 create or replace package pak_Paging is type paging_cursor_type is ref cursor; end; --建立存儲過程 pro_Paging(表名,每頁記錄數,顯示第幾頁的頁數,總記錄數,總頁數,遊標) create or replace procedure pro_Paging(tableName in varchar2, pagingSize in number, pageNum in number, rowSum out number, pageCount out number, paging_cursor out pak_Paging.paging_cursor_type) is --定義部分 --定義sql語句 v_sql varchar2(1000); --定義兩個整數,開始記錄數和結束記錄 v_begin number := (pageNum - 1) * pagingSize + 1; v_end number := pageNum * pagingSize ; begin --執行部分 v_sql := 'select * from (select a.*, rownum rn from (select * from '|| tableName ||') a where rownum <= '|| v_end ||') where rn >= '|| v_begin ||''; --打開遊標,關聯sql語句 open paging_cursor for v_sql; --計算總記錄數 和 總頁數 v_sql := 'select count(*) from ' || tableName; --執行sql,並將返回值賦值給rowSum execute immediate v_sql into rowSum; --計算PageCount if mod(rowSum, pagingSize)=0 then pageCount := rowSum/pagingSize; else pageCount := rowSum/pagingSize + 1; end if; --關閉遊標 --close paging_cursor; end; /* Java 程序 public class TestPagingProcedure { public static void main(String[] args) { Connection conn = null; CallableStatement cs = null; String tableName = "emp"; //分頁每頁顯示的記錄數 int pageSize = 5; //頁數 int pageNum = 3; int rowSum, pageCount; try { //加載驅動 Class.forName("oracle.jdbc.driver.OracleDriver"); //得到鏈接 conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "dog", "dog"); cs = conn.prepareCall("{call PRO_PAGING(?, ?, ?, ?, ?, ? )}"); cs.setString(1, tableName); cs.setInt(2, pageSize); cs.setInt(3, pageNum); //返回結果 參數設置 //總記錄數 cs.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER); //總頁數 cs.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER); //結果集 cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR); cs.execute(); //獲得結果 rowSum = cs.getInt(4); pageCount = cs.getInt(5); System.out.println("總記錄數: " + rowSum + " ---- 總頁數: " + pageCount); ResultSet rs = (ResultSet) cs.getObject(6); while (rs.next()) { System.out.println("員工號:" + rs.getInt(1) + " 員工姓名:" + rs.getString(2) + " 職位:" + rs.getString(3) + " 領導工號:" + rs.getString(4) + " 入職日期:" + rs.getString(5) + " 工資:" + rs.getString(6) + " 獎金:" + rs.getString(7) + " 部門號:" + rs.getString(8)); } } catch (Exception e) { e.printStackTrace(); } finally { try { cs.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } */