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;

oracle:储存过程实现分页的更多相关文章

  1. oracle储存过程,job,视图,触发器(记性不好,写个例子自己记)

    存储过程 create or replace procedure TestPro(Descerr out varchar2 ) is begin select * from test; excepti ...

  2. oracle储存过程学习笔记

    转载至: https://www.2cto.com/database/201610/559389.htm 1.什么是oracle存储过程 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQ ...

  3. 【转】oracle查询用户表,函数,储存过程,

    ◆Oracle查询用户表空间:select * from user_all_tables ◆Oracle查询所有函数和储存过程:select * from user_source ◆Oracle查询所 ...

  4. Sql Server分页储存过程

    --分页储存过程if exists (select * from sys.procedures where name='Page')drop proc Pagegocreate proc Page@P ...

  5. sql2005分页储存过程和C#分页类

    1.sql2005分页储存过程 --sql2005,qq524365501 create Procedure up_page2005 ), -- 表名称 ), -- 列 ), -- 主键,用于统计总数 ...

  6. MySQL 储存过程-原理、语法、函数详细说明

    Mysql储存过程是一组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,当需要使用该组SQL语句时用户只需要通过指定储存过程的名字并给定参数就可以调用执行它了,简而言之就是一组已经写好的命 ...

  7. Oracle和MySql的分页查询区别和PL/SQL的基本概念

    Oracle和MySql的分页查询区别:     Oracle的分析查询,之前Oracle的分页是使用伪列 ROWNUM 结合子查询实现,mysql的分页更简单,直接使用 LIMIT 关键字就可以实现 ...

  8. C#函数与SQL储存过程

    一点点小认识作为memo,求指正. C#的函数与SQL的储存过程有很多的相似性, 它们都是一段封闭的代码块,来提高代码的重用性,虽然现在复制粘贴很方便,但是我们在写多个函数的时候频繁的复制粘贴相同的内 ...

  9. SQL获取所有数据库名、表名、储存过程以及参数列表

    SQL获取所有数据库名.表名.储存过程以及参数列表 1.获取所有用户名:SELECT name FROM Sysusers where status='2' and islogin='1'islogi ...

随机推荐

  1. MQTT 及其 测试工具

    协议说明书:https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/04-OperationalBehavior.html 官网提供了很多的broker模拟 ...

  2. kafka channle的应用案例

      kafka channle的应用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近在新公司负责大数据平台的建设,平台搭建完毕后,需要将云平台(我们公司使用的Ucloud的 ...

  3. 使用pycharm开发代码上传到GitLab和GitHub

    使用pycharm开发代码上传到GitLab和GitHub 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我这里主要是针对局域网的自减的GitLab服务器,python开发工程师如 ...

  4. brctl创建虚拟网卡详解

    brctl创建虚拟网卡详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 很久之前我分享过一篇关于搭建Openvpn的笔记,在笔记的最后我分享了一个脚本,是用来创建虚拟网卡的,今天 ...

  5. Linux下网卡绑定模式

    Linux bonding驱动一共提供了7种模式,它们分别是:balance-rr .active-backup.balance-xor.broadcast.802.3ad.balance-tlb.b ...

  6. CodeBlock 快捷键大全

     一款开源的C/C++ IDE(集成开发环境),基于wxWidgets GUI体系,跨平台支持. 编辑器 快捷键 功能 Ctrl+Z 恢复上一次操作 Ctrl+Shift+Z 重复上一次操作 F1 ...

  7. 改变placeholder的字体颜色大小

    input::-webkit-input-placeholder { /* WebKit browsers */ font-size:14px; color: #333; } input::-moz- ...

  8. HDU1233 还是畅通工程【最小生成树】

    题意: 求出连接各个村庄最小的公路总长度,把最小公路总长度求出来. 思路: 最小生成树原理,带入数据求得. 代码: prim: #include<iostream> #include< ...

  9. 第17月第7天 iOS 数组越界,防Crash处理

    1. 上面方法已经可以避免crash,为了避免冗余的代码,写一个NSArray的分类,利用runtime替换NSArray的对象方法objectAtIndex:,在这里进行判断,捕获异常: #impo ...

  10. 第14月第11天 linkmap

    1. 4.LinkMap服务的开启方式及文件目录 Xcode->Project->Build Settings-> Search map -> 设置 Write Link Ma ...