日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
在Oracle存儲過程中正確的實現分頁

在Oracle存儲過程中正確的實現分頁在實際中的應用比例還是占為多數的,如果你對這一相關技術,心存好奇的話,以下的文章將會給你提供Oracle存儲過程中正確的實現分頁的好用的操作方案。

目前創(chuàng)新互聯建站已為數千家的企業(yè)提供了網站建設、域名、網站空間、網站托管、服務器租用、企業(yè)網站設計、和平網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發(fā)展。

幾乎每一個WEB應用都會用到分頁,因此,將其做得通用高效就變得非常重要了,根據自己的想法用Oracle存儲過程做了一個分頁的存儲過程,與大家分享,希望能夠通過討論得到更好的解決方案。

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

1、首先建立一個包,用戶創(chuàng)建一個游標類型

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

2、創(chuàng)建Oracle存儲過程

CREATE OR REPLACE PROCEDURE prc_query

(p_tableName in varchar2, 表名

p_strWhere in varchar2, 查詢條件

p_orderColumn in varchar2, 排序的列

p_orderStyle in varchar2, 排序方式

p_curPage in out Number, 當前頁

p_pageSize in out Number, 每頁顯示記錄條數

p_totalRecords out Number, 總記錄數

p_totalPages out Number, 總頁數

v_cur out pkg_query.cur_query) 返回的結果集

IS

v_sql VARCHAR2(1000) := ''; sql語句

v_startRecord Number(4); 開始顯示的記錄條數

v_endRecord Number(4); 結束顯示的記錄條數

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. IF p_curPage < 1 THEN
  2. p_curPage := 1;
  3. END IF;
  4. IF p_curPage > p_totalPages THEN
  5. p_curPage := p_totalPages;
  6. END IF;

實現分頁查詢

 
 
 
  1. v_startRecord := (p_curPage - 1) * p_pageSize + 1;
  2. v_endRecord := p_curPage * p_pageSize;
  3. v_sql := 'SELECT * FROM (SELECT A.*, rownum r FROM ' ||
  4. '(SELECT * FROM ' || p_tableName;
  5. IF p_strWhere IS NOT NULL or p_strWhere <> '' THEN
  6. v_sql := v_sql || ' WHERE 11=1' || p_strWhere;
  7. END IF;
  8. IF p_orderColumn IS NOT NULL or p_orderColumn <> '' THEN
  9. v_sql := v_sql || ' ORDER BY ' || p_orderColumn || ' ' || p_orderStyle;
  10. END IF;
  11. v_sql := v_sql || ') A WHERE rownum <= ' || v_endRecord || ') B WHERE r >= '
  12. || v_startRecord;
  13. DBMS_OUTPUT.put_line(v_sql);
  14. OPEN v_cur FOR v_sql;
  15. END prc_query;

3、JAVA代碼里取出結果集

 
 
 
  1. String sql= "{ call prc_query(?,?,?,?,?,?,?,?,?) }";
  2. CallableStatement call = con.prepareCall(sql);

中間數據設置及注冊省略

 
 
 
  1. call.registerOutParameter(9, OracleTypes.CURSOR);

取出結果集

 
 
 
  1. (ResultSet) call.getObject(9);

上述的相關內容就是對Oracle存儲過程中實現分頁的描述,希望會給你帶來一些幫助在此方面。


分享標題:在Oracle存儲過程中正確的實現分頁
標題鏈接:http://www.dlmjj.cn/article/dpijsoj.html