Oracle實踐--PL/SQL綜合之分頁存儲過程

Oracle PL/SQL分頁的存儲過程

         Oracle,分頁,存儲過程三個詞結合起來,來個綜合點的小練習,運用之前的PL/SQL創建一個分頁的存儲過程,只需要簡單幾步即可。

1.聲明一個引用遊標

[sql] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. create or replace package cur_ref_type 
  2. as-- is or as can be used 
  3. type cur_ref is ref cursor
  4. end
create or replace package cur_ref_type
as-- is or as can be used
type cur_ref is ref cursor;
end;
2.編寫存儲過程

[sql] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. create or replace procedure divideByPge 
  2.          (tableName varchar2,pageSize number,currentPage number, 
  3.                  totalPage out number,totalRecord out number,results out cur_ref_type.cur_ref)--要帶包名 
  4. is 
  5. v_sql varchar2(200);--用於寫sql語句的 
  6. v_begin number;--開始位置 
  7. v_end number;--結束位置 
  8. begin 
  9. v_begin := (currentPage -1) * pageSize; 
  10. v_end := currentPage * pageSize; 
  11. v_sql :='select count(*) from '||tableName;--將表名字符串拼接sql語句 
  12. execute immediate v_sql into totalRecord;--查詢所有記錄 
  13. totalPage :=ceil(totalRecord/pageSize);--計算總頁數 
  14. v_sql :='select * from (select rownum rn,'||tableName||'.* from '||tableName||' where rownum <= '||v_end||') where rn > '||v_begin; 
  15. open  results for v_sql; 
  16. end
create or replace procedure divideByPge
         (tableName varchar2,pageSize number,currentPage number,
                 totalPage out number,totalRecord out number,results out cur_ref_type.cur_ref)--要帶包名
is
 v_sql varchar2(200);--用於寫sql語句的
 v_begin number;--開始位置
 v_end number;--結束位置
begin
 v_begin := (currentPage -1) * pageSize;
 v_end := currentPage * pageSize;
 v_sql :='select count(*) from '||tableName;--將表名字符串拼接sql語句
 execute immediate v_sql into totalRecord;--查詢所有記錄
 totalPage :=ceil(totalRecord/pageSize);--計算總頁數
 v_sql :='select * from (select rownum rn,'||tableName||'.* from '||tableName||' where rownum <= '||v_end||') where rn > '||v_begin;
 open  results for v_sql;
end;
3.Java客戶端調用
[java] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. String driver ="oracle.jdbc.driver.OracleDriver"
  2.         String url  = "jdbc:oracle:thin:@localhost:1521:orcl"
  3.         String username = "scott"
  4.         String password = "ysjian"
  5.         try
  6.            Class.forName(driver); 
  7.            Connection conn = 
  8.                         DriverManager.getConnection(url,username,password); 
  9.            CallableStatement cs = conn.prepareCall("{call 
  10.                                          divideByPge(?,?,?,?,?,?)}"); 
  11.            cs.setString(1,"emp");//表名 
  12.            cs.setInt(2, 3);//分頁單位 
  13.            cs.setInt(3, 1);//當前頁 
  14.            cs.registerOutParameter(4, OracleTypes.INTEGER);//註冊輸出參數 
  15.            cs.registerOutParameter(5, OracleTypes.INTEGER); 
  16.            cs.registerOutParameter(6, OracleTypes.CURSOR);//註冊輸出參數遊標 
  17.            cs.execute();//執行 
  18.            ResultSet rs = (ResultSet)cs.getObject(6);//獲得遊標 
  19.            while(rs.next()){ 
  20.                int empno = rs.getInt("empno"); 
  21.                String ename = rs.getString("ename"); 
  22.                System.out.println(empno+"-->"+ename); 
  23.            } 
  24.         } catch (ClassNotFoundException | SQLException e) { 
  25.            e.printStackTrace(); 
  26.         } 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章