程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle存儲過程中如何正確實現分頁?

Oracle存儲過程中如何正確實現分頁?

編輯:Oracle數據庫基礎

在實際的應用中我們可以根據自己的想法用Oracle存儲過程做一個頁的相關的存儲過程,下面的文章主要是和大家分享Oracle存儲過程的經驗心得,希望你能通此文章對其的實際操作有個更好的了解。

之所以用存儲過程,是因為以後需要修改的話不需要修改程序代碼,只需要修改Oracle存儲過程的代碼。但這個例子是在存儲過程裡動態生成的SQL語句,不知道會不會因此失去存儲過程一次編譯和快速的特點。代碼如下:

1、首先建立一個包,用戶創建一個游標類型

  1. create or replace package pkg_query as  
  2. type cur_query is ref cursor;  
  3. end pkg_query;  

2、創建Oracle存儲過程

  1. create OR REPLACE PROCEDURE prc_query  
  2. (p_tableName in varchar2,   

表名

  1. p_strwhere in varchar2,  

查詢條件 --*

  1. p_orderColumn in varchar2,  

排序的列 --*

  1. p_orderStyle in varchar2,  

排序方式 --*

  1. p_curPage in out Number, 

當前頁

  1. p_pageSize in out Number,  

每頁顯示記錄條數

  1. p_totalRecords out Number,  

總記錄數

  1. p_totalPages out Number,  

總頁數

  1. v_cur out pkg_query.cur_query)  

返回的結果集

  1. IS  
  2. v_sql VARchar2(1000) := ’’;   

sql語句

  1. v_startRecord Number(4);  

開始顯示的記錄條數

  1. v_endRecord Number(4); 

結束顯示的記錄條數

  1. BEGIN 

記錄中總記錄條數

  1. v_sql := ’select TO_NUMBER(count(*)) FROM ’ || p_tableName || ’ where 11=1’;  
  2. IF p_strwhere IS NOT NULL or p_strwhere <> ’’ THEN  
  3. v_sql :v_sql || p_strwhere;  
  4. END IF;  
  5. execute IMMEDIATE v_sql INTO p_totalRecords;  

驗證頁面記錄大小

  1. IF p_pageSize < 0 THEN  
  2. p_pageSize :0;  
  3. END IF;  

根據頁大小計算總頁數

  1. IF MOD(p_totalRecords,p_pageSize) = 0 THEN  
  2. p_totalPages :p_totalRecords / p_pageSize;  
  3. ELSE  
  4. p_totalPages :p_totalRecords / p_pageSize + 1;  
  5. END IF;   
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved