oracle:储存过程实现分页
1 CREATE OR REPLACE PACKAGE PKG_QUERY IS 2 3 4 5 -- Author : ADMINISTRATOR 6 -- Created : 2016/12/8 星期四 10:28:37 7 -- Purpose : 用做查询游标 8 9 10 -- Public type declarations 11 TYPE CUR_QUERY IS REF CURSOR; 12 13 14 END PKG_QUERY; 15 16 17 18 19 CREATE OR REPLACE PROCEDURE prc_query 20 (p_tableName in varchar2, --表名 21 p_strWhere in varchar2, --查询条件 22 p_child_query in varchar2, --子查询 23 p_orderColumn in varchar2, --排序的列 24 p_orderStyle in varchar2, --排序方式 25 p_curPage in out Number, --当前页 26 p_pageSize in out Number, --每页显示记录条数 27 p_totalRecords out Number, --总记录数 28 p_totalPages out Number, --总页数 29 v_cur out pkg_query.cur_query) --返回的结果集 30 IS 31 v_sql VARCHAR2(4000) := ''; --sql语句 32 v_startRecord Number(7); --开始显示的记录条数 33 v_endRecord Number(7); --结束显示的记录条数 34 BEGIN 35 --记录中总记录条数 36 v_sql := 'SELECT TO_NUMBER(COUNT(*)) FROM ' || p_tableName || ' WHERE 1=1'; 37 IF p_strWhere IS NOT NULL THEN 38 v_sql := v_sql || p_strWhere; 39 END IF; 40 dbms_output.put_line(v_sql); 41 EXECUTE IMMEDIATE v_sql INTO p_totalRecords; 42 p_totalPages := 0; 43 -- if p_totalRecords <> 0 then 44 45 46 --验证页面记录大小 47 IF p_pageSize < 0 THEN 48 p_pageSize := 0; 49 END IF; 50 51 52 --根据页大小计算总页数 53 IF MOD(p_totalRecords,p_pageSize) = 0 THEN 54 p_totalPages := floor(p_totalRecords / p_pageSize); 55 ELSE 56 p_totalPages := floor(p_totalRecords / p_pageSize) + 1; 57 END IF; 58 59 60 61 62 63 64 --实现分页查询 65 v_startRecord := (p_curPage - 1) * p_pageSize + 1; 66 v_endRecord := p_curPage * p_pageSize; 67 v_sql := 'SELECT b.*,' || p_child_query || ' FROM (SELECT A.*, rownum r FROM ' || 68 '(SELECT * FROM ' || p_tableName; 69 IF p_strWhere IS NOT NULL THEN 70 v_sql := v_sql || ' WHERE 1=1 ' || p_strWhere; 71 END IF; 72 IF p_orderColumn IS NOT NULL THEN 73 v_sql := v_sql || ' ORDER BY ' || p_orderColumn || ' ' || p_orderStyle; 74 END IF; 75 v_sql := v_sql || ') A WHERE rownum <= ' || v_endRecord || ') B WHERE r >= ' 76 || v_startRecord; 77 DBMS_OUTPUT.put_line(v_sql); 78 OPEN v_cur FOR v_sql; 79 -- end if; 80 81 82 END prc_query;
为人:谦逊、激情、博学、审问、慎思、明辨、 笃行
学问:纸上得来终觉浅,绝知此事要躬行
为事:工欲善其事,必先利其器。
态度:道阻且长,行则将至;行而不辍,未来可期
.....................................................................
------- 桃之夭夭,灼灼其华。之子于归,宜其室家。 ---------------
------- 桃之夭夭,有蕡其实。之子于归,宜其家室。 ---------------
------- 桃之夭夭,其叶蓁蓁。之子于归,宜其家人。 ---------------
=====================================================================
* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。 * @author Alan -liu * @Email no008@foxmail.com
转载请标注出处! ✧*꧁一品堂.技术学习笔记꧂*✧. ---> https://www.cnblogs.com/ios9/
学问:纸上得来终觉浅,绝知此事要躬行
为事:工欲善其事,必先利其器。
态度:道阻且长,行则将至;行而不辍,未来可期
.....................................................................
------- 桃之夭夭,灼灼其华。之子于归,宜其室家。 ---------------
------- 桃之夭夭,有蕡其实。之子于归,宜其家室。 ---------------
------- 桃之夭夭,其叶蓁蓁。之子于归,宜其家人。 ---------------
=====================================================================
* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。 * @author Alan -liu * @Email no008@foxmail.com
转载请标注出处! ✧*꧁一品堂.技术学习笔记꧂*✧. ---> https://www.cnblogs.com/ios9/