在實際的應用中我們可以根據自己的想法用Oracle存儲過程做一個頁的相關的存儲過程,下面的文章主要是和大家分享Oracle存儲過程的經驗心得,希望你能通此文章對其的實際操作有個更好的了解。
之所以用存儲過程,是因為以後需要修改的話不需要修改程序代碼,只需要修改Oracle存儲過程的代碼。但這個例子是在存儲過程裡動態生成的SQL語句,不知道會不會因此失去存儲過程一次編譯和快速的特點。代碼如下:
1、首先建立一個包,用戶創建一個游標類型
- create or replace package pkg_query as
- type cur_query is ref cursor;
- end pkg_query;
2、創建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
記錄中總記錄條數
- v_sql := ’select TO_NUMBER(count(*)) FROM ’ || p_tableName || ’ where 11=1’;
- IF p_strwhere IS NOT NULL or p_strwhere <> ’’ THEN
- v_sql := v_sql || p_strwhere;
- END IF;
- execute IMMEDIATE v_sql INTO p_totalRecords;
驗證頁面記錄大小
- IF p_pageSize < 0 THEN
- p_pageSize := 0;
- END IF;
根據頁大小計算總頁數
- IF MOD(p_totalRecords,p_pageSize) = 0 THEN
- p_totalPages := p_totalRecords / p_pageSize;
- ELSE
- p_totalPages := p_totalRecords / p_pageSize + 1;
- END IF;